使用flask-sqlalchemy在不同的模块中访问相同的db.session?

时间:2014-08-08 12:51:19

标签: flask sqlalchemy flask-sqlalchemy

我正在使用flask-sqlachemy。我宣布一个db对象附加到烧瓶app:

__init __。py

中的

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
..
db = SQLAlchemy(app)

现在我在db中使用views,并使用sqlalchemy管理db.session的设置和拆卸。然后我在business中调用一个方法,其中访问db.session

SQLAlchemy是否将同一会话授予调用者和被调用者方法,即使它们位于不同的模块中?我担心viewsbusiness会在访问db.session时看到不同的会话。


在views.py中

from myapp import db
from business import check_dude

@app.route("/csrf_test", methods=['GET'])
def csrf_test_form():
    dude = db.session.query(...)
    flag = check_dude( dude)

在business.py中

from myapp import db
def check_dude( dude):
    x = db.session.query(...)

1 个答案:

答案 0 :(得分:0)

简答:你应该没事。

这里的代码是关键

db = SQLAlchemy(app)

您正在将db绑定到Flask的特定app实例。从技术上讲,您也可以这样做:

db = SQLAlchemy()

然后在其他地方

db.init_app(app) 

因此,Flask-SQLAlchemy允许您立即或稍后绑定整个应用程序。

只要您将db声明放在__init__.py中,我就会说您可以安全地重复使用任何模块。