【问题标题】:Execute SQL Query on Multiple Values Psycopg2对多个值执行 SQL 查询 Psycopg2
【发布时间】:2018-02-11 00:02:55
【问题描述】:

我正在使用 psycopg2 执行一些 PostGIS 查询,但我遇到了问题。假设我运行一个查询:

cursor.execute("SELECT locations FROM locationtable")

这给了我一个 Python 变量,它是一个点几何的列表。稍后,假设我想将它们转换为不同的 SRID 我希望能够做到:

cursor.execute("SELECT ST_Transform(%s,32146)",(locs))

但这给了我一个错误:

TypeError:字符串格式化期间并非所有参数都转换

我意识到在这种情况下我可以将这两个 SQL 命令组合起来,但这是我一直遇到的一个普遍问题,我想知道是否有办法通过 psycopg2 传递元组列表 em> 并让 SQL 命令对所有值执行。

【问题讨论】:

  • 该错误可能是因为第一个查询返回一个列表(我猜)并且您尝试将该列表传递给单个占位符。 executemany 有效吗?

标签: python postgresql postgis psycopg2


【解决方案1】:

它可以与executemany 方法一起使用:

cursor.executemany("SELECT ST_Transform(%s,32146)",(locs))

locs 需要是元组列表或其他序列类型,例如:

locs = [(val,) for val in locs]

【讨论】:

  • 它在执行时没有给我任何错误,但由于某种原因,在获取它时说没有什么可获取的。我在 psycopg2 文档中看到 executemany 并不比在 for 循环中使用 execute 快,所以我决定这样做,因为它更容易。
  • 是的,使用循环和执行可能更容易,在每种情况下您都需要循环,选择更灵活的方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2021-04-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
相关资源
最近更新 更多