Использование 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 родитель
Может ли кто-нибудь подчеркнуть, что я здесь делаю не так?