python - SQL 查询 Python 变量
问题描述
我正在尝试使用 python 变量进行 postgis 查询。但是,当我执行以下查询时:
sql = """SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(?, ?, ?, ?, 4326)""",str(x0), str(y0), str(x1), str(y1)
TerrLine = gpd.GeoDataFrame.from_postgis(sql, connection, geom_col='geom')
我得到以下信息:
Execution failed on sql '('SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(%s, %s, %s, %s, 4326)', -1.400993559416539)': argument 1 must be a string or unicode object: got tuple instead
我一定错过了一些小东西,但我似乎无法让它工作。
x0, y0, x1, y1 都是浮点数。
任何帮助将不胜感激,
汤姆
解决方案
您没有将变量替换为 SQL 字符串,而是设置sql
为包含 SQL 字符串后跟变量值的元组。
假设 PostGIS 接口实现了标准cursor
接口,您应该将变量作为元组参数提供给cursor.execute()
函数。
sql = """SELECT * FROM "12NM(LineGridExp)" WHERE "12NM(LineGridExp)".geom && ST_MakeEnvelope(?, ?, ?, ?, 4326)"""
cur.execute(sql, (x0, y0, x1, y1))
推荐阅读
- symfony - PhpUnit 测试存储库 Symfony findOneBy
- python - 如何使用顺序颜色图绘制熊猫条形图?
- javascript - 如果隐藏表单包含 id='style' 的输入,则在 javascript 中设置 display='block' 后将不可见
- ruby - 尝试在 Bundle Install [Rails 5.1.3, Ruby 2.3.3] 上写入 C:/Users/REMOTE~1/AppData/ 时出错
- oauth-2.0 - 无法检索 LinkedIn 授权代码
- java - 无法获取信息 Java
- python - 使用列表作为惩罚的张量流中的自定义损失函数
- mysql - mysqldump 创建的行多于主键的实际范围
- ios - 带有自定义后端的 Firebase 身份验证
- android - 离子本机串行返回设备未找到