sqlalchemy と geoalchemy2 でクエリを equal orm ステートメントに変換しようとしています。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)))
役立つアイデアはありますか?