2014-10-30 27 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

相關問題