使用 SQLAchemy 构建数据库

问题描述 投票:0回答:1

您好,我有点坚持使用 SQLAlchemy 为我的 Flask 应用程序创建数据库。事实上,我正在观看 Flask 应用程序的教程,一切正常,直到出现此错误: SQLAlchemy.create_all() 得到了意外的参数“app”

这是代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path

db = SQLAlchemy()
DB_NAME = 'database.db'

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'AmirMohammad Purzahed'
    app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
    db.init_app(app)
    
    from .views import views
    from .auth import auth
    
    app.register_blueprint(views, url_prefix='/')
    app.register_blueprint(auth, url_prefix='/')
    
    from .models import User, Note
    
    create_database(app)
    
    return app

def create_database(app):
    if not path.exists('website/' + DB_NAME):
        db.create_all(app=app)
        print('Created Database!')
python flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

那么,您显然需要从

app
中删除
create_all()
参数。但为了确保调用
create_all()
时应用程序上下文可用,您必须将
create_database()
with app.app_context()
括起来:

# ... Above stays the same ...

    with app.app_context():
        create_database()

    return app

def create_database():
    if not path.exists('website/' + DB_NAME):
        db.create_all()
        print('Created Database!')

同时从函数中删除

app
参数,这是不需要的。


请参阅 Flask-SQLAlchemy 应用程序上下文文档 (3.1.x) 了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.