PyCharm PostgreSQL 方言检测

PyCharm PostgreSQL dialect detection

PyCharm 中的 PostgreSQL 方言有问题。我有以下 SELECT 查询:

"SELECT * FROM table WHERE ST_DWithin(table.geog_column,
ST_GeographyFromText(\'SRID=4326;POINT(%s %s)\'), %s)"

查询在查询编辑器中按预期执行,但 Pycharm 抱怨 <expression> expected, got '%'。我已将方言检测设置为 PostgreSQL。

我认为参数绑定存在问题,但无法确定问题所在。任何帮助将不胜感激。

编辑:我不知何故错过了 psycopg2 文档中有关使用 python 字符串插值和连接的明确警告。

正确的做法是使用 SQLAlchemy 构建原始 SQL 查询:

from sqlalchemy import text

sql = text("SELECT * FROM table WHERE ST_DWithin(table.geog_column,
ST_GeographyFromText(\'SRID=4326;POINT(:long :lat)\'), :distance)")
data = {'long': longitude, 'lat': latitude, 'distance': distance}
result = conn.execute(sql, data)

下面的方法是错误的,容易受到 SQL 注入的影响。留在这里仅供参考。

我刚刚发现了这个错误,对于其他咖啡因饥饿的人,您需要在单引号内添加 %s。初级但很容易被忽略。

"SELECT * FROM table WHERE ST_DWithin(table.geog_column,
ST_GeographyFromText(\'SRID=4326;POINT('%s' '%s')\'), *'%s'*)"

引用为我解决了这个问题,但我不完全确定这是否是正确的方法,因此将其留在这里以获得一些意见。