我目前正在開發一個新的Web應用程序,它需要在嚮應用程序本身提供會話之前執行SQL語句。SQLAlchemy連接如何與基於會話的事務相關聯?
詳細信息:我正在運行帶有多個模式的PostgreSQL數據庫服務器,並且我需要在應用程序使用會話之前執行SET search_path
語句。我也使用ZopeTransactionExtension
讓請求級別自動處理事務。
爲了確保SQL語句的exectuion,似乎有兩種可能的方式:
- 通過SQLAlchemy的事件在引擎/連接級別執行語句(從Multi-tenancy with SQLAlchemy)
- 執行的語句會話級別(從SQLAlchemy support of Postgres Schemas)
由於我使用的作用域會話並希望保持我的事務完好無損,我不知道哪種方法可能會干擾事務管理。
例如,引擎是否從池中發出新連接每個查詢?或者連接到會話的整個生命週期,即直到請求被處理並且會話&事務被關閉/提交?
另一方面,由於我正在使用範圍會話,我可以按照zzzeek在第二個鏈接中提示的方式執行它嗎?也就是說,一旦交易結束,上下文是否保留並自動重置?
有可能是我失蹤的第三種方式?
太棒了,謝謝。然後,我將鉤入會議。什麼是相反的事件? 'after_commit'?因爲我想在會話結束後重置search_path。 – javex