PyCharm PostgreSQL方言检测

时间:2016-05-09 05:28:53

标签: postgresql python-3.x pycharm postgis

在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。

我认为参数绑定存在问题,但无法弄清问题是什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

编辑:我在某种程度上错过了有关使用python字符串插值和连接的psycopg2文档的明确警告。

正确的方法是使用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'*)"

报价为我解决了这个问题,但我不完全确定这是否是正确的方法,因此留待它来获取一些意见。