中文文档 v?
英文文档 v3.x
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 引入上下文
如果您计划只使用一个应用程序,您大可跳过这一章节。只需要把您的应用程序传给 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论