2014-10-30 82 views
2

我有新创建的对象。我想知道如何检查当前会话是否有该对象?Flask sqlalchemy检查db.session中是否有对象并准备提交

事情是这样的:

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

是这样的可能吗?

此外,我想为我的瓶子实例创建after_request,以便不必担心提交,它只允许我检查db.session是否已准备好提交或不提交。如果是,那么执行db.session.commit()。

事情是这样的:

@app.after_request 
def after_request(response): 
    if db.session.is_ready(): 
     db.session.commit() 

回答

4

您可以检查对象,以查看它的当前状态。如果它被添加到会话,但尚未刷新到数据库,这将有一个未决的状态,例如:

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 in the docs

+0

谢谢@Doobeh。这有助于检查对象是否在会话中。但是,我仍然如何决定提交是否准备好?何时动态刷新? – srahul07 2014-10-31 07:30:48

+1

如果您要求如何开启自动提交功能,那么当您设置会话时,这只是'autocommit = True'([docs here](http://docs.sqlalchemy.org/en/rel_0_8/orm /session.html#autocommit-mode)),或者如果你使用Flask-SQLAlchemy,它是'db = SQLAlchemy(session_options = {'autocommit':True})''。如果您要求自动提交请求级别,例如只在请求结束时提交,而不是在期间提交,只有在需要时才提交 - 我想你可以检查[会话状态](http://docs.sqlalchemy.org/en/rel_0_8/orm/session.html#会话属性)本身,并从中判断。 – Doobeh 2014-10-31 12:53:13

+0

好的。谢谢你会检查! – srahul07 2014-11-03 10:48:54