2009-10-19 58 views
5

如果兩個SQLAlchemy模型必須參與相同的會話,是否需要從declarative_base()的同一實例繼承?導入兩個或多個定義SQLAlchemy模型的模塊時,情況可能如此。必須有兩個SQLAlchemy聲明模型共享相同的declarative_base()嗎?

from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class SomeClass(Base): 
    __tablename__ = 'some_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

Base2 = declarative_base() 

class AnotherClass(Base2): 
    __tablename__ = 'another_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

回答

4

我在單個會話中成功使用了不同的聲明基礎。這在使用多個數據庫時很有用:每個基本都使用自己的元數據創建,每個元數據綁定到單獨的數據庫。您的某些聲明性基礎可以定義其他方法,或者可以使用其他元類來安裝擴展。

+0

您也可以使用帶有binds = {Class:database,...}參數的單個Session。 – joeforker 2009-10-19 18:30:05

+0

當然。但是,這種綁定字典在變得龐大時很難維護。雖然我說從幾個元數據對象自動構造它。 – 2009-10-20 03:52:03

2

單獨的基類將工作得很好。

當你使用不同的數據庫連接時,你必須小心,在這種情況下,你不能在兩個數據庫中使用連接 - 每個查詢都需要到一個數據庫。

相關問題