実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 最初のレンダリング時にデータベースを構築(初期化)したい
前提
フロントエンドにVue(Vue3)を採用し、APIサーバであるFlaskを経由してデータを取得するというシステムを設計している。DBMSはSQLiteで、それをSQLAlchemyで操作している(ORM)。フロントで入力したデータをFlask経由でデータベースに登録する操作を実行したときにエラーが発生した。
発生している問題・エラーメッセージ
RuntimeError: The current Flask app is not registered with this 'SQLAlchemy' instance. Did you forget to call 'init_app', or did you create multiple 'SQLAlchemy' instances?
該当のソースコード
models.py
1from datetime import datetime 2from flask_sqlalchemy import SQLAlchemy 3 4db = SQLAlchemy() 5 6class Users(db.Model): 7 __tablename__ = 'users' 8 id = db.Column(db.Integer, primary_key=True) 9 name = db.Column(db.String(255)) 10 results = db.relationship('Results', backref='user', lazy=True) 11 12class Results(db.Model): 13 __tablename__ = 'results' 14 id = db.Column(db.Integer, primary_key=True) 15 user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) 16 level = db.Column(db.Text, nullable=False) 17 clearTime = db.Column(db.Integer, nullable=False) 18 collectedCoins = db.Column(db.Integer, nullable=False) 19 timestamp = db.Column(db.DateTime, index=True, default=datetime.now) 20 21def init_db(app): 22 db.init_app(app) 23 db.create_all() 24 25def add_user(name): 26 model = Users(name=name) 27 db.session.add(model) 28 db.session.commit()
app.py
1from flask import Flask, send_from_directory 2from api import api_bp 3from flask_sqlalchemy import SQLAlchemy 4from models import init_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 11@app.route("/", defaults={'path': ''}) 12@app.route('/<path:path>') 13def index(path): 14 return send_from_directory(app.static_folder, "index.html") 15 16if __name__ == '__main__': 17 with app.app_context(): 18 init_db(app) 19 app.run()
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 ports: 16 - '5000:5000' 17 volumes: 18 - ./backend:/usr/src/app 19 - ./frontend/dist:/usr/src/app/frontend/dist 20 command: flask run --host=0.0.0.0
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
backendの方のDockerfile
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 pip install flask_sqlalchemy 12RUN pip install flask-restful
試したこと
本アプリケーションとは異なるが、実環境でFlaskとVueを用いたWEBアプリケーションを作成したときは上記のコードでエラーは出なかった。CharGPT-4や各種Webサイトで調べたが、解決方法が見つからなかった。
補足情報(FW/ツールのバージョンなど)
特になし。
回答2件
あなたの回答
tips
プレビュー