Ссылка на ту же таблицу из внешнего запроса в подзапросе sqlalchemy + geoalchemy2 ORM - PullRequest
2 голосов
/ 14 июля 2020

Я пытаюсь преобразовать запрос в оператор равенства orm в sqlalchemy и geoalchemy2. Я изо всех сил пытаюсь получить ссылку на p1.geom в подзапрос в предложении not exists.

SELECT p1.geom FROM polygons as p1 
WHERE p1.column1 = 'something' AND NOT EXISTS(
   SELECT 1 FROM polygons  AS p2
   WHERE p2.column2 = 'something else' AND ST_Intersects(p1.geom, p2.geom)
)

Я уже пробовал немного, но самое близкое, что я получил, было примерно таким:

p1 = self._session.query(polygons.geom).filter_by(column1='something').subquery()
p2 = ~self._session.query(polygons.geom).filter(polygons.column2 == 'something else')\
.filter(polygons.geom.intersects(p1.c.geom)).exists()
result = self._session.query(polygons.geom)\
        .filter_by(column1='something')\
        .filter(p2)

Что я получил от этого:

SELECT polygons.geom FROM polygons 
WHERE polygons.column1 = 'something' AND NOT (EXISTS (
   SELECT 1 FROM (
      SELECT polygons.geom AS geom FROM polygons 
      WHERE polygons.column1 = 'something') AS anon_1 
   WHERE polygons.column2 = 'something else' AND (polygons.geom && anon_1.geom)))

Есть идеи, которые могли бы помочь?

...