返回介绍

2. 引入上下文

发布于 2023-05-20 01:15:15 字数 1181 浏览 0 评论 0 收藏 0

如果您计划只使用一个应用程序,您大可跳过这一章节。只需要把您的应用程序传给 SQLAlchemy 构造函数,一般情况下您就设置好了。然而您想要使用不止一个应用或者在一个函数中动态地创建应用的话,您需要仔细阅读。

如果您在一个函数中定义您的应用,但是 SQLAlchemy 对象是全局的,后者如何知道前者了?答案就是 init_app() 函数:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

它所做的是准备应用以与 SQLAlchemy 共同工作。然而现在不把 SQLAlchemy 对象绑定到您的应用。为什么不这么做? 因为那里可能创建不止一个应用。

那么 SQLAlchemy 是如何知道您的应用的?您必须配置一个应用上下文。如果您在一个 Flask 视图函数中进行工作,这会自动实现。但如果您在交互式的 shell 中,您需要手动这么做。(参阅 创建应用上下文 )。

简而言之,像这样做:

>>> from yourapp import create_app
>>> app = create_app()
>>> app.app_context().push()

在脚本里面使用 with 声明都样也有作用:

def my_function():
    with app.app_context():
        user = db.User(...)
        db.session.add(user)
        db.session.commit()

Flask-SQLAlchemy 里的一些函数也可以接受要在其上进行操作的应用作为参数:

>>> from yourapp import db, create_app
>>> db.create_all(app=create_app())

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文