2013-10-08 94 views
1

我對SQLAlchemy中的會話對象感到困惑。它是否像PHP會話一樣,會話是用戶的所有事務,或者是一個會話,它是一個範圍是事務生命週期的實體。SQLAlchemy會話對象

對於SQLAlchemy的每一筆交易,是過程如下: - 創建和公開會議 -perform交易 -commit或回滾 -close會議

所以,我的問題是,對於一個客戶,做我們創建一個會話對象,或者每當我們有一個事務執行時創建一個會話對象

回答

3

因爲通常PHP會話引用cookie,所以我會猶豫是否要將SQLAlchemy會話與PHP會話進行比較,而SQLAlchemy有與cookies或HTTP完全無關。

正如the documentation解釋:

會話是在邏輯 操作,其中數據庫的訪問是可能的預期的開始通常被構造。

只要用於與數據庫交談的會話,會話在開始通信時就立即開始數據庫事務處理 。假設 自動提交標誌保持其推薦默認值爲False,則該事務將保持進行中,直到會話回滾,或提交或關閉 。如果在前一個交易結束之後再次使用 ,則會話將開始新的交易;從 這可以得出結論,該會話能夠在許多交易中具有使用期限 ,儘管每次只有一個。我們將這兩個概念稱爲事務範圍和會話範圍。

這裏的含義是,SQLAlchemy的ORM正在鼓勵 開發者在他或她的申請,以建立這兩個領域, 不僅包括在範圍開始和結束,也延展的範圍的 ,例如如果單個Session實例是本地的 到一個函數或方法內的執行流程,它應該是整個應用程序使用的一個 全局對象,還是這兩者之間的某個地方的 。

正如您所看到的,確定如何使用會話完全取決於應用程序的開發人員。在簡單的桌面應用程序中,創建單個全局會話對象並繼續使用該會話對象可能是有意義的,並在用戶點擊「保存」時提交。在Web應用程序中,經常使用「處理每個請求的會話」策略。有時你在同一個應用程序中使用這兩種策略(一個會話請求每次請求Web請求,但是一個會話具有稍微不同的後臺任務屬性)。

何時使用會話沒有「一刀切」的解決方案。 documentation確實會提示您如何確定這一點。