假设SQLlite数据库的以下sqlalchemy代码:
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。
对于丹尼尔(id 5),将返回一个ID为4(母亲),3(父亲),2(祖母)和1(祖父)的列表。
对于亚历克斯(id 3),将返回ID为2(母亲)和1(父亲)的列表。
使用混合属性ancestors
时,它应该返回Person
对象的列表,这些对象代表该人的祖先。
现在编码的hybrid属性将仅返回祖先ID列表,而不返回对象,这正是我想要的。
我认为我应该进行第二次子查询或类似的查询,但是到目前为止,所有尝试都没有用。
我应该怎么做?