質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

116閲覧

Flask内のDBにおいて、テーブルを作成したい。(SQLite)

Nakano_Akito

総合スコア10

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/04/13 09:05

実現したいこと

  • [] FlaskでSQLiteを用いてデータベースを作成したい。

発生している問題・分からないこと

DBにデータを登録してそれを参照しようとしたが、根本的にテーブルが作られていないことが分かった。
Docker(docker-compose。backendがFlask、frontendがVue3)を使用しており、backendコンテナ内でsqlite3コマンドによるテーブル確認を行ったが、何も表示されなかった。

該当のソースコード

models.py

1from datetime import datetime 2from flask_sqlalchemy import SQLAlchemy 3from sqlalchemy import desc 4from collections import namedtuple 5 6db = SQLAlchemy() 7 8class Users(db.Model): 9 __tablename__ = 'users' 10 id = db.Column(db.Integer, primary_key=True) 11 username = db.Column(db.String(255)) 12 results = db.relationship('Results', backref='user', lazy=True) 13 14class Results(db.Model): 15 __tablename__ = 'results' 16 id = db.Column(db.Integer, primary_key=True) 17 user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) 18 level = db.Column(db.Text, nullable=False) 19 clearTime = db.Column(db.Integer, nullable=False) 20 collectedCoins = db.Column(db.Integer, nullable=False) 21 timestamp = db.Column(db.DateTime, index=True, default=datetime.now) 22 23def add_user(username): 24 already = db.session.query(Users).filter(Users.username == username) 25 if not already: 26 model = Users(username=username) 27 db.session.add(model) 28 db.session.commit() 29 30def result_post(username, level, collectedCoins, clearTime): 31 user_id = db.session.query(Users).filter(Users.username == username) 32 model = Results( 33 user_id=user_id, 34 level=level, 35 clearTime=clearTime, 36 collectedCoins=collectedCoins 37 ) 38 db.session.add(model) 39 db.session.commit() 40 41 42Ranking = namedtuple('Ranking', [ 43 'result_id', 44 'username', 45 'level', 46 'clear_time', 47 'collected_coins', 48 'timestamp' 49]) 50def get_ranking(): 51 rank5_init = db.session.query( 52 Results.id, 53 Users.username, 54 Results.level, 55 Results.clearTime, 56 Results.collectedCoins, 57 Results.timestamp 58 ).join(Users, Users.id == Results.user_id 59 ).order_by( 60 desc(Results.collectedCoins), 61 desc(Results.clearTime) 62 ).limit(5).all() 63 64 rank5 = [Ranking( 65 result_id=row[0], 66 username=row[1], 67 level=row[2], 68 clear_time=row[3], 69 collected_coins=row[4], 70 timestamp=row[5] 71 ) for row in rank5_init] 72 73 # デバッグ用コード 74 print(f"Retrieved rankings: {rank5}") 75 return rank5

app.py

1from flask import Flask, send_from_directory 2from api import api_bp 3from flask_sqlalchemy import SQLAlchemy 4from models import db 5 6app = Flask(__name__, static_folder='/usr/src/app/frontend/dist', static_url_path="") 7app.register_blueprint(api_bp) 8app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///maze.db' 9app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 10 11db.init_app(app) 12 13@app.route("/", defaults={'path': ''}) 14@app.route('/<path:path>') 15def index(path): 16 return send_from_directory(app.static_folder, "index.html") 17 18if __name__ == '__main__': 19 with app.app_context(): 20 db.create_all() 21 app.run(debug=True, host='0.0.0.0')

Dockerfile(backend)

1FROM python:3.12.2 2 3WORKDIR /usr/src/app 4 5COPY ./ /usr/src/app/ 6COPY ./requirements.txt ./ 7 8RUN pip install --upgrade pip 9RUN pip install --upgrade flask 10RUN pip install -r requirements.txt 11RUN apt-get update && \ 12 apt-get install -y sqlite3 libsqlite3-dev && \ 13 rm -rf /var/lib/apt/lists/* 14RUN pip install flask_sqlalchemy

docker

1services: 2 frontend: 3 build: 4 context: ./frontend 5 dockerfile: Dockerfile 6 command: npm run dev 7 ports: 8 - '5173:5173' 9 volumes: 10 - ./frontend:/usr/src/app 11 backend: 12 build: 13 context: ./backend 14 dockerfile: Dockerfile 15 command: ["python3", "app.py", "--host=0.0.0.0"] 16 ports: 17 - '5000:5000' 18 volumes: 19 - ./backend:/usr/src/app 20 - ./frontend/dist:/usr/src/app/frontend/dist

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

実環境で、似たような構成のアプリケーションを作成したときは問題なかったため、そのコードを参考に開発を進めた。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

docker-compose.ymlで設定したDocker環境内におけるパスにて各種コマンドを実行したところ、テーブルの存在が確認された。

投稿2024/04/13 09:29

Nakano_Akito

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問