使用混合属性返回SQLAlchemy中的另一个子查询

时间:2018-08-25 17:02:55

标签: python sqlalchemy networkx

假设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列表,而不返回对象,这正是我想要的。

我认为我应该进行第二次子查询或类似的查询,但是到目前为止,所有尝试都没有用。

我应该怎么做?

0 个答案:

没有答案