Как бы я запросить с помощью sqlalchemy, чтобы получить все объекты из списка смежности? - PullRequest
2 голосов
/ 07 октября 2019
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])
            )

Как использовать этот тип модели для запроса всех связанных объектов родительского объекта?

Другими словами, мне нужен список, содержащий все дочерние элементы и дочерние элементы дочерних элементов, идети детей дети ...

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Это то, что я закончил, вероятно, не самое лучшее, но это сработало.

pks = []

def get_pk(o):
    pks.append(o.pk)
    for a in o.attachments:
        get_pk(a)

get_pk(parent)
1 голос
/ 07 октября 2019

Запрос children непосредственно на объекте вашего узла. Проверьте ленивый параметр в документации sqlalchemy. Это определит, когда именно ваш список будет запрошен (с самим объектом или отдельно)

См. Код ниже для справки

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

PS: children_list будет иметь только непосредственных детей. Чтобы получить внуков и далее, запрашивайте снова и снова при необходимости, проверьте параметр lazy для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...