una programacion profundidad partir matriz lista hacer grafos grafo como busqueda algoritmo adyacencia sqlalchemy

programacion - Construya todo el árbol a partir de una relación de lista de adyacencia SQLAlchemy



lista de adyacencia java (1)

No hay problema con la propiedad primaria, ya que toda la información necesaria ya está cargada en el objeto. SQLAlchemy solo tiene que buscar el objeto primario en la sesión y emitir una consulta solo cuando falta. Pero esto no funciona para los niños: la biblioteca no puede estar segura de que todos los objetos secundarios ya estén en la sesión. Para que pueda construir el árbol usted mismo e instruir a SQLAlchemy para que use estos datos a través de set_committed_value :

from collections import defaultdict from sqlalchemy.orm.attributes import set_committed_value nodes = session.query(Node).all() # Collect parent-child relations children = defaultdict(list) for node in nodes: if node.parent: children[node.parent.id].append(node) # Set collected values for node in nodes: set_committed_value(node, ''children'', children[node.id])

Tengo un nodo de clase con un mapeo autorreferencial ''hijos'' (backref ''parent'') que representa un árbol en SQLAlchemy y quiero seleccionar todo el árbol. Si lo hago

session.query(Node).all()

luego, cada acceso a node.children activa una selección. Si hago una carga unida

session.query(Node).options(joinedload_all(''children'')).all()

entonces el sql emitido tiene una unión de tabla innecesaria ya que quiero el árbol completo (todos los nodos) de todos modos. ¿Hay alguna manera de hacer esto en SA o debería simplemente construir el árbol por mi cuenta fuera de SA?