在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。
我认为参数绑定存在问题,但无法弄清问题是什么。任何帮助将不胜感激。
答案 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'*)"
报价为我解决了这个问题,但我不完全确定这是否是正确的方法,因此留待它来获取一些意见。