我在爲金字塔編寫一個庫。一個方面涉及庫提供了一個模型類,然後從數據庫中檢索模型的所有實例。但是,如果不訪問會話工廠,我無法與數據庫進行交互。在第三方庫中訪問金字塔DB會話
在Django中,這被照顧在幕後。與金字塔& SQLAlchemy不是這種情況。
有我得到內金字塔當前線程的DB會話的保持一種標準的方式,而無需特定的項目是如何設置(因爲這是一個可重用庫)的任何知識呢?
PS。我仍然在SQLAlchemy的這個領域裏頭,所以請原諒任何混淆。
我在爲金字塔編寫一個庫。一個方面涉及庫提供了一個模型類,然後從數據庫中檢索模型的所有實例。但是,如果不訪問會話工廠,我無法與數據庫進行交互。在第三方庫中訪問金字塔DB會話
在Django中,這被照顧在幕後。與金字塔& SQLAlchemy不是這種情況。
有我得到內金字塔當前線程的DB會話的保持一種標準的方式,而無需特定的項目是如何設置(因爲這是一個可重用庫)的任何知識呢?
PS。我仍然在SQLAlchemy的這個領域裏頭,所以請原諒任何混淆。
你可以在繼承類指定sqla會話屬性,像工廠的男孩做: https://factoryboy.readthedocs.org/en/latest/orms.html?highlight=sqlalchemy#sqlalchemy
另一種方法是創建界面,並要求登記在應用註冊表工具SQLAlchemy的會議上,「config.include」之前你的擴展。也許pyramid_jinja2將澄清此解決方案。
我推薦閱讀大約
約定爲請求對象添加會話。你的圖書館只是做一個假設,然後在你的包文檔中寫下它。
全球對非全局會議
一個官方教程展示了這些概念
很多金字塔應用程序使用包zope.sqlalchemy整合應用程序事務管理和DB會話管理。這種方法甚至被推薦爲by SQLAlchemy docs的衆多選項之一。至少對我來說,zope.sqlalchemy的文檔有點混亂。整個話題對於使用SQLAlchemy開始金字塔和線程本地會話的人來說是一個混亂的源頭。
要看到一個全功能的金字塔的應用程序,利用這些包看ToDoPyramid - one of the sample application listed on pyramid docs pages
我cloned the project使數據庫相關的代碼至少的可測試性和可讀性給我。我發現這些概念工作得很好 - 如果目標數據庫環境設置正確。
感謝@庫布斯,我最後一起去了後者,這似乎是最好的路線。因爲金字塔1.4 –
Configurator.add_request_method已面世,是該用例的快捷方式 - http://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html#pyramid.config.Configurator.add_request_method –