我正在查询由第三方维护的专有数据库。该数据库有许多表,每个表都包含大量字段。
我的问题涉及三个感兴趣的表,树、站点和仪表。
树表以简单的树结构描述节点。与其他数据一起,它有一个外键引用它自己的主键。它还有一个 Object_Type 字段和一个 Object_ID 字段。Site 和 Meter 表各有许多字段。
树节点与仪表或站点具有一对一的关系。如果 Object_Type 字段为 1,则 Object_ID 字段指的是 Site 表中的主键。如果为 2,则表示 Meter 表中的主键。
我正在使用反射来像这样加载表结构
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_ID 作为外键添加两个关系,并对 Object_Type 字段进行适当检查?