我正在使用下面的ORM创建图形结构,并且能够进行插入。
Base = declarative_base()
class Link(Base):
__tablename__ = 'base_link'
_constraints = ['first_id', 'second_id']
__table_args__ = (UniqueConstraint(*_constraints, name = 'link_constraint'), {"schema":"my_schema"})
id = Column(CHAR(32), primary_key=True)
object_type = Column(String(16))
first_id = Column(CHAR(32), ForeignKey(Node.id))
second_id = Column(CHAR(32), ForeignKey(Node.id))
orl1 =relationship('Node', foreign_keys=first_id)
orl2 =relationship('Node', foreign_keys=second_id)
class Node(Base):
__tablename__ = 'node'
_constraints = ['h_name', 'd_name']
__table_args__ = (UniqueConstraint(*_constraints, name='node_constraint'), {"schema":"my_schema"})
h_name = Column(String(256),nullable=False)
d_name = Column(String(256),nullable=True)
id = Column(CHAR(32),primary_key=True)
我很难查询上面的对象 例如:
案例1 对于Case-1(ref case-1.png),我的加入非常简单。
Usage = aliased(Link, name = "Usage")
node_1 = aliased(Node, name = "node_1")
node_2 = aliased(Node, name = "node_2")
查询将是
session.query(node_1, node_2).join(Usage, node_1.id == Usage.first_id).join(node_2, node_2.id == Usage.second_id)
我的案例2(ref case-2.png)如何加入?
Usage = aliased(Link, name = "Usage")
Usage_2 = aliased(Link, name = "Usage_2")
node_1 = aliased(Node, name = "node_1")
node_2 = aliased(Node, name = "node_2")
node_3 = aliased(Node, name = "node_3")
我无法正确构建查询
下面的查询尽可能接近
session.query(node_1, node_2, node_3).join(Usage, node_1.id==Usage.first_id).join(Usage_2, node_3.id==Usage_2.first_id).join(node_2, and_(node_2.id==Usage.second_id, node_2.id==Usage_2.second_id))
我知道这是错的。如果有人能指出我的案例2加入的正确方向,那将是非常好的。
谢谢。
答案 0 :(得分:0)
我在sqlalchemy小组中发布了同样的问题,并对如何解决我的问题有了一些了解,请点击下面的链接。 https://groups.google.com/forum/#!topic/sqlalchemy/L9u3LuJp-AY