2009-10-19 15 views
5

2つのSQLAlchemyモデルが同じセッションに参加する必要がある場合、同じインスタンスdeclarative_base()から継承する必要がありますか?これは、SQLAlchemyモデルを定義する2つ以上のモジュールをインポートする場合に当てはまります。2つの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、...}引数を持つ単一のセッションを使用することもできます。 – joeforker

+0

しかし、そのようなバインド辞書は、巨大になると維持するのは難しいです。私はいくつかのメタデータオブジェクトから自動的に構築することについて述べています。 –

2

個別の基本クラスは正常に動作します。

異なるデータベース接続を使用している場合は、2つのデータベース間で結合を使用できないため、すべてのクエリを1つのデータベースに移動する必要があります。

関連する問題