サードパーティによって管理されている独自のデータベースにクエリを実行しています。データベースには、それぞれが多数のフィールドを持つ多くのテーブルがあります。
私の問題は、Tree、Site、Meterの3つの対象テーブルに関するものです。
ツリーテーブルは、単純なツリー構造でノードを記述します。他のデータとともに、それ自体の主キーを参照する外部キーがあります。Object_TypeフィールドとObject_IDフィールドもあります。SiteテーブルとMeterテーブルには、それぞれ多くのフィールドがあります。
ツリーノードは、メーターまたはサイトのいずれかと1対1の関係にあります。Object_Typeフィールドが1の場合、Object_IDフィールドはサイトテーブルの主キーを参照します。2の場合、メーターテーブルの主キーを参照します。
私はリフレクションを使用してテーブル構造をロードしています
Base = declarative_base(cls=DeclarativeReflectedBase)
class Meter(Base):
__tablename__ = 'Meter'
class Site(Base):
__tablename__ = 'Site'
class Tree(Base):
__tablename__ = 'Tree'
Parent_Node_ID = Column(Integer, ForeignKey('Tree.Node_ID'))
Node_ID = Column(Integer, primary_key=True)
children = relationship("Tree", backref=backref('parent', remote_side=[Node_ID]))
Base.prepare(engine)
私は自己参照関係を含めましたが、それは完全に機能します。Object_Typeフィールドを適切にチェックして、外部キーとしてObject_IDを使用して2つの関係を追加するにはどうすればよいですか?