如何使用flask应用程序工厂模式使用db.create_all()?

时间:2019-10-24 07:26:40

标签: flask-sqlalchemy

我在以工厂模式创建表时遇到了麻烦。 在使用工厂模式之前,我可以(在终端中)导入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'

0 个答案:

没有答案