Flask-SQLAlchemy db.create_all() 得到了意外的关键字参数“app”

Tat*_*a - 20 python flask flask-sqlalchemy

我正在遵循使用 Flask-SQLAlchemy 创建 Flask 应用程序的教程。但是,在创建数据库时它开始引发错误。如何创建数据库?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
    db.init_app(app)

    from . import models

    create_database(app)
    return app

def create_database(app):
    if not path.exists("website/project.db"):
        db.create_all(app=app)
        print("created database")
Run Code Online (Sandbox Code Playgroud)

该行db.create_all(app=app)给了我这个错误:

SQLAlchemy.create_all() got an unexpected keyword argument 'app'
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 45

Flask-SQLAlchemy 3 不再接受app诸如 之类的方法的参数create_all。相反,它始终需要一个活动的 Flask 应用程序上下文。

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
    db.init_app(app)

    from . import models

    with app.app_context():
        db.create_all()

    return app
Run Code Online (Sandbox Code Playgroud)

不需要该create_database功能。SQLAlchemy 不会覆盖现有文件,并且唯一不会创建数据库的情况是它引发错误。