我在以工厂模式创建表时遇到了麻烦。
在使用工厂模式之前,我可以(在终端中)导入db和模型,然后运行db.create_all()在数据库中创建数据库模型。
但是,如何使用create_app()模式执行相同操作?
我试图将其放入init文件中进行启动。
但是,这有点简化了。
__init__.py
# more imports here..
from models import *
db = SQLAlchemy()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
db.init_app(app)
db.create_all()
return app
我的应用程序运行正常,但是数据库中的表从未创建,也没有出现任何错误? (在上面的示例中,我已经删除了蓝图等)。
我通过以下方式运行我的应用程序
run.py
from app import create_app
import os
app = create_app("config.{}".format(currentenv))
我真的不想在init.py文件中使用db.create_all(),这只是我试图创建表而已(这是行不通的)。我想像以前一样在终端中执行此操作,但是我不确定如何运行导入并创建表。
更新
查看文档后,我又走了几步。 https://flask-sqlalchemy.palletsprojects.com/en/2.x/contexts/
使用以下代码
from app import create_app, db
from config import MyConfig
app = create_app(MyConfig)
with app.app_context():
db.create_all()
I get an error I dont understand to solve
db.init_app(app)
AttributeError: 'str' object has no attribute 'init_app'