使用sqlalchemy从sqlite数据库中查询数据-需要在结果集中包含重复项

monwx1rj  于 2023-06-06  发布在  SQLite
关注(0)|答案(1)|浏览(191)

在我的数据库中,我有三个表:

class Element(Base):
 id_ = Column(Integer, primary_key=True);
 nodes = relationship('Node', secondary='element_node', 
 back_populates='elements',
                     order_by='ElementNode.node_position')
 .
 .   

class Node(Base):
 id_ = Column(Integer, primary_key=True)
 .
 .

class ElementNode(Base):
 node_id = 
 Column(Integer,ForeignKey('node.id_'),primary_key=True);
 element_id = Column(Integer, ForeignKey('element.id_'), 
 primary_key=True)

 node_position = Column(Integer, primary_key=True)
 .
 .

ElementNode表有一些如下所示的条目:
| 节点ID|元素ID|节点位置|
| - -----|- -----|- -----|
| 1|一百|1|
| 2|一百|2|
| 3|一百|3|
| 3|一百|4|
| 3|一百|5个|
当我查询这个元素对象并使用element.nodes时,我只得到节点1,2,3但是当我调用element.nodes时,我也需要重复的元素,因为它们有不同的节点位置。
我试着添加一个新的关系,但我不能找出正确的方法来做。

atmip9wb

atmip9wb1#

我认为你需要让ElementNode成为一个成熟的类,而不是使用secondary。该模式称为关联对象:https://docs.sqlalchemy.org/en/20/orm/basic_relationships.html#association-object

class Element(Base):
    elementNodes = relationship("ElementNode", back_populates="element")

class ElementNode(Base):
    element = relationship("Element", back_populates="elementNodes")
    node = relationship("Node", back_populates="elementNodes")

class Node(Base):
    elementNodes = relationship("ElementNode", back_populates="node")

相关问题