gpt4 book ai didi

flask-sqlalchemy - 使用 Flask-SQLAlchemy 和蓝图循环导入数据库引用

转载 作者:行者123 更新时间:2023-12-03 08:34:03 24 4
gpt4 key购买 nike

我正在使用 Flask-SQLAlchemy 和蓝图,我无法帮助自己使用循环导入。
我知道我可以在函数中编写导入并使其工作,但这听起来很讨厌,我想与社区确认是否有更好的方法来做到这一点。

问题是我有一个模块(blueprints.py),我在其中声明数据库并导入蓝图,但这些蓝图需要同时导入数据库声明。

这是代码(重要部分的摘录):

应用程序.apps.people.views.py

from application.blueprints import db

people = Blueprint('people', __name__,
template_folder='templates',
static_folder='static')

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)

@people.route('/all')
def all():
users = User.query.all()

应用程序.blueprints.py
from application.apps.people.views import people

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
app.register_blueprint(people, url_prefix='/people')

我已阅读有关此主题的文档和发现的问题,但仍然找不到我正在寻找的答案。
我发现这一章 ( https://pythonhosted.org/Flask-SQLAlchemy/contexts.html) 建议将初始化代码放在方法中,但循环导入仍然存在。

编辑
我使用模式 Application Factory 解决了这个问题

最佳答案

我在 Application Factory 的帮助下解决了这个问题图案。我在第三个模块中声明数据库,稍后在启动应用程序的同一模块中对其进行配置。

这将导致以下导入:

  • 数据库.py → app.py
  • view.py → app.py
  • 数据库.py → View .py

  • 没有循环导入。确保在调用数据库操作之前启动和配置应用程序很重要。

    这是一个示例应用程序:

    应用程序.py
    from database import db
    from flask import Flask
    import os.path
    from views import User
    from views import people


    def create_app():
    app = Flask(__name__)
    app.config['DEBUG'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////tmp/test.db"
    db.init_app(app)
    app.register_blueprint(people, url_prefix='')
    return app


    def setup_database(app):
    with app.app_context():
    db.create_all()
    user = User()
    user.username = "Tom"
    db.session.add(user)
    db.session.commit()


    if __name__ == '__main__':
    app = create_app()
    # Because this is just a demonstration we set up the database like this.
    if not os.path.isfile('/tmp/test.db'):
    setup_database(app)
    app.run()

    数据库.py
    from flask_sqlalchemy import SQLAlchemy

    db = SQLAlchemy()

    View .py
    from database import db
    from flask.blueprints import Blueprint


    people = Blueprint('people', __name__,
    template_folder='templates',
    static_folder='static')


    class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)


    @people.route('/')
    def test():
    user = User.query.filter_by(username="Tom").first()
    return "Test: Username %s " % user.username

    关于flask-sqlalchemy - 使用 Flask-SQLAlchemy 和蓝图循环导入数据库引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22929839/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com