我对在烧瓶应用程序中定义sql(flask-sqlalchemy)模型的位置感到困惑。我有一个app.py创建了烧瓶应用程序(app = Flask(__name__)
),我有一个models.py实例化SQLAlchemy并定义我的模型:
from flask import current_app
db = SQLAlchemy(current_app)
class Habit(db.Model):
rowid = db.Column(db.Integer, primary_key=True)
然而,唯一可行的方法是,如果我的app.py在创建应用程序后将其导入,这违反了将所有导入放在文件顶部的python习惯用法。但是,这就是我见过的许多示例应用(Ex. 1)(Ex. 2)。
必须有一个更好的方式来定义你的模型,但它感觉就像一个捕获22.模型子类db.Model,db使用flask应用程序实例化(使用flask-sqlalchemy),并且flask app必须导入模型(否则代码不会运行)。我可以创建一个新文件,首先导入应用程序,然后导入数据库,但是惯用,似乎实例化Flask应用程序的文件往往是应用程序的入口点。
有什么建议吗?谢谢!
答案 0 :(得分:0)
您可以使用init_app
Flask扩展方法在实例化后将它们绑定到Flask应用程序。例如,您的models.py模块:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Habit(db.Model):
rowid = db.Column(db.Integer, primary_key=True)
您的启动文件(app.py):
from flask import Flask
from models import db
app = Flask()
db.init_app(app)
app.run()
它可以帮助您构建模块化应用程序,逻辑分离在不同的文件中。