Flask sqlalchemy 检查对象是否在 db.session 且准备提交

7 投票
1 回答
5288 浏览
提问于 2025-04-30 15:19

我有一些新创建的对象。我想知道怎么检查当前的会话里是否有这个对象?

类似这样的:

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

文档里有一个关于对象状态的小介绍,可以看看这里

撰写回答