Flask SQLALchemy:检查对象是否在db.session中并准备提交

7

我有一些新创建的对象。我想知道如何检查当前会话是否有该对象?

类似于这样:

user = User(...)
....
db.session.add(user)
...
if db.session.has_object(user):
    <process further>

这种情况是否可能发生?

另外,我想为我的Flask实例创建一个after_request函数,这样就不必担心提交问题,只需检查db.session是否准备好提交。如果是,则执行db.session.commit()。

类似于这样:

@app.after_request
def after_request(response):
    if db.session.is_ready():
        db.session.commit()
1个回答

10

您可以检查对象以查看其当前状态。如果它已添加到会话中,但尚未刷新到数据库,则会处于挂起状态,例如:

from sqlalchemy import inspect

u = User(name='Alice')
inspection = inspect(u)
inspection.pending  # False

db.session.add(u)
inspection.pending # True

db.session.commit()
inspection.pending # False

文档中有一个关于对象状态的简短介绍intro to the object states


谢谢@Doobeh。这有助于检查对象是否在会话中。但是我如何决定提交是否准备好?何时动态刷新? - Rahul Shelke
1
如果你想知道如何开启自动提交,那么在设置会话时只需使用autocommit=True即可(文档在这里)。如果你正在使用Flask-SQLAlchemy,则是db = SQLAlchemy(session_options={'autocommit': True})。如果你想在请求级别上实现自动提交,例如仅在请求结束后、而不是在请求期间进行提交,且仅在必要时才提交——我想你可以检查 会话状态,然后从中判断。 - Doobeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接