Предположим, следующий код sqlalchemy для базы данных SQLlite:
from sqlalchemy import (Column, Unicode, Integer)
from sqlalchemy.ext.declarative import declarative_base
from mypackage import get_ancestors_id
class Person(Base):
__tablename__ = 'persons'
id = Column('id', Integer, primary_key=True, nullable=False)
name = Column('name', Unicode(16), nullable=False)
age = Column('age', Integer)
@hybrid_property
def ancestors(self):
# get_ancestors_id will return a list of IDs, ie: [1,3,4]
# get_ancestors_id should return a list of Person objects
return get_ancestors_id(self.id)
и следующие данные:
+-----------+-----------+-----------+
|Id |Name |Age |
+-----------+-----------+-----------+
|1 |John |70 |
+-----------+-----------+-----------+
|2 |Olivia |68 |
+-----------+-----------+-----------+
|3 |Alex |43 |
+-----------+-----------+-----------+
|4 |Anna |40 |
+-----------+-----------+-----------+
|5 |Daniel |8 |
+-----------+-----------+-----------+
|6 |Paul |5 |
+-----------+-----------+-----------+
Я использую библиотеку networkx для работы с направленным графом. Используя его, я написал функцию get_ancestors_id
, которая возвращает идентификатор для всех предков человека.
Для Даниила (id 5) вернул бы список с идентификаторами 4 (мать), 3 (отец), 2 (бабушка) и 1 (дедушка).
Для Алекса (id 3) вернется список с идентификаторами 2 (мама) и 1 (папа).
При использовании гибридного свойства ancestors
он должен возвращать список Person
объектов, представляющих предков этого человека.
Гибридное свойство в том виде, в котором оно закодировано, теперь будет возвращать только список идентификаторов предков, но не объекты, чего я и хочу.
Я думаю, что мне следует создать второй подзапрос или что-то в этом роде, но все попытки до сих пор были бесполезны.
Как мне это сделать?