我正在使用 sqlalchemy 创建一个类似于图形的结构,以便有几种类型的节点和连接它们的链接。节点定义如下:
class Node(Base):
__tablename__ = 'node'
id = Column(Integer, primary_key=True)
type = Column(Unicode)
__mapper_args__ = {'polymorphic_on': type}
class InputNode(Node):
__tablename__ = 'inputnode'
id = Column(Integer, ForeignKey('node.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'input'}
class ThruNode(Node):
__tablename__ = 'thrunode'
id = Column(Integer, ForeignKey('node.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'thru'}
class OutputNode(Node):
__tablename__ = 'outputnode'
id = Column(Integer, ForeignKey('node.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'output'}
现在我想创建一个Link
看起来像这样的表:
class Link(Base):
__tablename__ = 'link'
input = Column(Integer, ForeignKey('node.id', where='type IN ("input", "thru")'))
output = Column(Integer, ForeignKey('node.id', where='type IN ("thru", "output")'))
我正在努力解决的问题是如何做where
它的一部分,因为正如我所写的那样,它在 sqlalchemy 中无效。我曾使用过 aCheckConstraint
或 a ForeignKeyConstraint
,但我看不出它们中的任何一个实际上如何用于执行此操作。