【发布时间】:2019-07-09 16:59:09
【问题描述】:
我正在尝试获取点列表并查询地理空间数据库,以查找所有匹配的行。
我有一个如下所示的计算 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 manual page 的 VALUES,但我不明白如何构造一个空的 VALUES 表达式。
【问题讨论】:
标签: django python-3.x postgresql psycopg2