sqlAlchemy: session.query (Model.column) возвращает false - PullRequest
0 голосов
/ 09 июня 2018

Использование sqlalchemy для запроса к таблице с самоссылкой, как показано ниже -

district = session.query(
    District._id, District.name, District.level,
    District.parent, District.ordering, District.description,
    functions.ST_AsGeoJSON(District.area).label('area'),....
    ,.... and some columns

).filter(
    st_contains(
        'district.area',
        st_point(lat, lng)
    )
).filter(
    District.level == float(level)
).first()

Запрос выполняется правильно, но для столбца District.parent возвращается False вместоидентификатор родителя

Ниже приведен класс моделей для района

class District(Base):
__tablename__ = 'district'
_id = Column('_id', Text, primary_key=True)
_database_id = Column('_database_id', Text, primary_key=True)
_owner_id = Column('_owner_id', Text, primary_key=True)
_created_by = Column('_created_by', Text)
_updated_by = Column('_updated_by', Text)
_access = Column('_access', JSON)
_created_at = Column('_created_at', DateTime)
_updated_at = Column('_updated_at', DateTime)
name = Column(Text, nullable=False)
level = Column(DOUBLE_PRECISION, nullable=False)
parent_id = Column(
    'parent',
    Text,
    ForeignKey('district._id'),
)
parent = relationship(
    'District',
    foreign_keys='District.parent_id',
)

Если я распечатываю запрос, я получаю что-то вроде этого -

SELECT district._id AS district__id, district.name AS district_name, 
district.level AS district_level, district._id = district.parent AS parent, 
district.ordering AS district_ordering, district.description AS 
district_description, ST_AsGeoJSON(district.area) AS area...,......
FROM district
WHERE ST_contains(area, ST_SetSRID(ST_Point(22.2883291, 
114.14048449999996),4326)) AND district.level = %(level_1)s
LIMIT %(param_1)s

Для родительского поля это дает что-то странное -> district._id = district.parent AS родитель

Может ли кто-нибудь подчеркнуть, что я здесь делаю не так?

1 Ответ

0 голосов
/ 09 июня 2018

В вашем District определении класса parent это не Column, а relationship.Таким образом, чтобы получить _id родителя, вы должны использовать:

district = session.query(
    District._id, District.name, District.level,
    District.parent_id, ...
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...