実現したいこと
ここに実現したいことを箇条書きで書いてください。
前提
フロントエンドに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()
試したこと
本アプリケーションとは異なるが、実環境でFlaskとVueを用いたWEBアプリケーションを作成したときは上記のコードでエラーは出なかった。CharGPT-4や各種Webサイトで調べたが、解決方法が見つからなかった。
補足情報(FW/ツールのバージョンなど)
特になし。

0 コメント