【问题标题】:How would I query using sqlalchemy to retrieve all objects from an adjacency list?我将如何使用 sqlalchemy 从邻接列表中检索所有对象进行查询?
【发布时间】:2019-10-09 22:41:52
【问题描述】:
class Node(Base):
    __tablename__ = 'node'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('node.id'))
    data = Column(String(50))
    children = relationship("Node",
                backref=backref('parent', remote_side=[id])
            )

当使用这种类型的模型时,我如何查询父级的所有链接对象?

换句话说,我需要一个包含所有孩子和孩子的孩子的列表,以及孩子的孩子的孩子......

【问题讨论】:

标签: python sqlalchemy


【解决方案1】:

直接在您的节点对象上查询 children。查看 sqlalchemy 文档中的惰性参数。这将决定何时查询您的列表(使用对象本身或单独)

参考下面的代码

parent = Node.query.filter_by(id=1).first()
children_list = n.children

P.S.:children_list 将只有直系子级。要获得孙子和进一步,请根据需要一次又一次地查询,检查 lazy 参数以获取更多信息

【讨论】:

    【解决方案2】:

    这就是我最终做的,可能不是最好的,但它确实有效。

    pks = []
    
    def get_pk(o):
        pks.append(o.pk)
        for a in o.attachments:
            get_pk(a)
    
    get_pk(parent)
    

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多