2008-12-12 47 views
6

我在工作中使用SQLAlchemy,它確實做得很好。現在我正在考慮最佳實踐。組織包含SQLAlchemy模型的文件夾的最佳方法

現在,我創建了一個模塊保存所有SQLA東西:

my_model 
     |__ __init__.py 
     |__ _config.py <<<<< contains LOGIN, HOST, and a MetaData instance 
     |__ table1.py <<<<< contains the class, the model and the mapper for table1 
     |__ table2.py <<<<< contains the class, the model and the mapper for table2 
     [...] 

現在,我真的不知道,如果是做的最好的方式。我想加載與精細粒度的類,並確保只創建一個連接與分貝,等等。

在這裏,所有的類是分開的,但所有的導入_config和我想知道,如果這是一件好事。

更重要的是,我希望能夠創建可獨立存儲的模型類的子類,而不會每次都搞亂mapper。我怎樣才能做到這一點 ?

現在我只是把它們放在同一個文件中,我必須創建另一個映射器,但每次都會調用第一個映射器。如果我不得不導入父類,因爲映射器在導入時被觸發,同樣的情況也會發生。如果我不使用該類訪問數據,每次映射它都不是過熱的嗎?

我想避免使用Elixir。

回答

3

我個人喜歡將數據庫/ ORM邏輯保留在模型類之外。它使他們更容易測試。我通常有類似於types.py的東西,它定義了我的應用程序中使用的類型,但是獨立於數據庫。

然後典型地有一個類似的db.py或東西其具有Session類和碼來建立數據庫,其中包括所有的映射器等

無其他模塊中的除了那些執行所需的其餘數據庫操作需要導入db模塊,並且數據庫的存在對大部分應用程序類都是完全隱藏的。

據我所知,在不更改映射器的情況下,不能輕易製作子類。 SQLAlchemy在執行查詢時無法知道從數據庫中檢索哪個子類,並且無論如何您都需要能夠指示子類。

我從沒有真正看到從主模塊db一次調用所有映射器時出現的任何問題,因此我不認爲始終初始化它們確實是一個問題,除非您真的將其確定爲瓶頸。根據我的經驗,其他處理比次要映射器開銷要大得多。

相關問題