Flask-SQLAlchemyを使用してFlaskアプリケーションを構築していますが、メインアプリケーションを実行せずにSqlite3データベースを作成するスクリプトを作成しようとしています。循環参照を避けるために、FlaskのメインアプリケーションオブジェクトとSQLAlchemyデータベースオブジェクトを別々のモジュールに初期化しました。私はその後、アプリケーションを実行するときに3番目のファイルにインポートして結合します。これは、データベースを構築し、行を作成してクエリを実行するときに正しく動作するため、アプリケーションを実行しているときに問題なく動作します。しかし、私は別のモジュールでそれらをインポートしようとすると、私は次のエラーを取得する:/フラスコ内のデータベースを作成するsqlalchemy
ルート/ create_database.py
from application.database import db
from application.server import app
db.init_app(app)
db.create_all()
ルート:
RuntimeError: application not registered on db instance and no applicationbound to current context
私のコードは次のようになります。 run.sh
export FLASK_APP=application/server.py
flask run
ルート/アプリケーション/ のinit .py
from database import db
from server import app
db.init_app(app)
from routes import apply_routes
apply_routes(app)
ルート/アプリケーション/ database.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
ルート/アプリケーション/ server.py
from flask import Flask
import os
app = Flask(__name__)
path = os.path.dirname(os.path.realpath(__file__))
database_path = os.path.join(path, '../mydb.sqlite')
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + database_path
ルート/アプリケーション/モデル/ INITの.py
from user import User
ルート/アプリケーション/モデル/ user.py私create_database.pyスクリプトで
from application.database import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(120))
def __init__(self, username, password):
self.username = username
self.password = password
私はSQLAlchemyのdb
インスタンスがapp
オブジェクトから設定内容で構成されていることを確認しようとしているが、それはdoesnの何らかの理由で接続しているようです。私はここで何か重要なものを逃しています
ありがとう。 – Copernicus