Я пытаюсь взять список точек и запросить геопространственную базу данных, чтобы найти все подходящие строки.
У меня есть вычисленный оператор SQL, который выглядит следующим образом:
cursor = connection.cursor()
cursor.execute(
'''
SELECT g.ident
FROM (VALUES %s) AS v (lon, lat)
LEFT JOIN customers g
ON (ST_Within(ST_SetSRID(ST_MakePoint(v.lon, v.lat), %s), g.poly_home));
''', [AsIs(formatted_points), SRID]
)
Вот пример того, как выглядит переменная formatted_points:
(-115.062,38.485), (-96.295,43.771)
Итак, когда она вставляется в выражение SQL, выражение VALUES выглядит так:
(VALUES (-115.062,38.485), (-96.295,43.771)) AS v (lon, lat)
Покахорошо.Однако, когда список точек пуст, выражение VALUES выглядит так:
(VALUES ) AS v (lon, lat)
.., что приводит к тому, что я получаю эту ошибку:
django.db.utils.ProgrammingError: syntax error at or near ")"
Другими словами, (VALUES )
не является допустимым SQL.
Вот вопрос: как мне представить пустой список, используя VALUES?Я мог бы сделать это в особом случае и просто вернуть пустой список, когда этой функции передан пустой список, но это не выглядит очень элегантно.
Я посмотрел на страницу руководства PostgreSQL для ЗНАЧЕНИЙ, но я не понимаю, как создать пустое выражение ЗНАЧЕНИЯ.