【发布时间】:2013-10-15 08:02:35
【问题描述】:
我正在使用 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 中无效。我曾想过使用CheckConstraint 或ForeignKeyConstraint,但我看不出它们中的任何一个实际上如何用于执行此操作。
【问题讨论】:
-
有什么更新吗?
-
@jpmorin 没有。幸运的是,这个项目现在已经被搁置了,所以我不需要担心。但是,我认为真正的解决方案是使用像 neo4j 这样的 nosql 数据库。不过,我仍然想知道如何在 sqlalchemy 中完成它。
标签: python database-design orm sqlalchemy polymorphic-associations