Flask sqlalchemy 检查对象是否在 db.session 且准备提交
我有一些新创建的对象。我想知道怎么检查当前的会话里是否有这个对象?
类似这样的:
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
文档里有一个关于对象状态的小介绍,可以看看这里。