2013-09-05 29 views
1

我有一個應用程序,用戶可以創建成本模型。 我想實現一項功能,用戶可以選擇一種「試用」模式,使他們能夠隨意進行多項更改並觀察成本影響。 如果試用成功,用戶應能夠提交所有更改,如果不成功,用戶應該能夠在進入試用模式之前回滾到該狀態。在sqlalchemy中創建保存點的最佳方法

我知道我可以將所有這些存儲在會話中,並簡單地使用提交或回滾,但這是最好的做法嗎?有更好的機制來設置和恢復dbs狀態嗎?

+0

有多種方式來回答這個問題。您可以將他們的「試用」運行保存爲數據庫中的實際記錄,其中「真實」記錄具有標記。或者,您可以讓用戶使用對象模型中的數據,甚至不將其保存到數據庫中。如果這是一個Web應用程序,您可以使用類似pickle的東西將對象模型保存在緩存(或Web會話)中。你究竟如何做到這一點實際上取決於你的項目的要求,即使如此,「最好」的方式是非常主觀的。 –

+0

您可能遇到的一件事是,在多個請求之間,默認的有限會話會話將不足以滿足每個請求的不同會話。 – javex

回答

2

存在保存點使用的示例。你可以閱讀更多的here

Session = sessionmaker() 
session = Session() 
session.add(u1) 
session.add(u2) 

session.begin_nested() # establish a savepoint 
session.add(u3) 
session.rollback() # rolls back u3, keeps u1 and u2 

session.commit() # commits u1 and u2 
相關問題