Flask sqlalchemy检查db.session中的对象是否已准备好进行提交

sra*_*l07 4 python sqlalchemy flask flask-sqlalchemy

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

像这样的东西:

user = User(...)
....
db.session.add(user)
...
if db.session.has_object(user):
    <process further>
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

另外,我想为我的flask实例创建after_request,这样我就可以只检查db.session是否准备好提交,而不是为了提交而烦恼.如果是,则执行db.session.commit().

像这样的东西:

@app.after_request
def after_request(response):
    if db.session.is_ready():
        db.session.commit()
Run Code Online (Sandbox Code Playgroud)

Doo*_*beh 6

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

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
Run Code Online (Sandbox Code Playgroud)

文档中的对象状态有一点介绍.