我正在查询由第三方维护的专有数据库。数据库有许多表,每个表都有大量的字段。使用反射建模复杂关系的SQLAlchemy
我的问题涉及三个感兴趣的表格,Tree,Site和Meter。
树表描述了简单树结构中的节点。与其他数据一起,它有一个外键引用自己的主键。它还有一个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字段上进行适当的检查?
这是很难跟随你的问题,但或许把一个指数[OBJECT_ID,OBJECT_TYPE],因为那将是每个树节点是唯一的。 – AJcodez 2012-07-09 19:08:26