gpt4 book ai didi

postgresql - PyCharm PostgreSQL 方言检测

转载 作者:行者123 更新时间:2023-11-29 12:58:21 25 4
gpt4 key购买 nike

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。

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

最佳答案

编辑:我不知何故错过了 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 注入(inject)的影响。我把它留在这里仅供引用。

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

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

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

关于postgresql - PyCharm PostgreSQL 方言检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37108269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com