psycopg2.extras.execute_values 插入多行几何数据

问题描述 投票:0回答:1

这是我的插入查询

sql = "INSERT INTO sightings (run_id, geometry, properties)
             VALUES(%s, ST_MakePoint(%s, %s), %s);"

1)run_id是一个内部uuid

2)几何 - 这是地理点对象

3) 属性是一个 JSON 对象

运行时

psycopg2.extras.execute_values(cur, sql, listOfTuples)
我收到一条错误消息:

查询包含多个“%s”占位符'

我意识到我在这方面犯了错误,但我该如何解决它。模板参数有什么帮助吗?

python postgis psycopg2
1个回答
15
投票

是的,

快速执行助手
文档中解释的template参数正是您所需要的。

psycopg2.extras.execute_values(cur, sql, argslist, template=None, page_size=100)

template
– 合并到 argslist 中每个项目以组成查询的片段。

尝试这样的事情:

sql = "INSERT INTO sightings (run_id, geometry, properties) VALUES %s"
user_id = 1
lnglat = (20.0, 40.0)
props = {"foo": "bar"}

listOfTuples = [(user_id,) + lnglat + (json.dumps(props),)]
# lisftOfTuples = [(1, 20.0, 40.0, '{"foo": "bar"}')]

psycopg2.extras.execute_values(
  cur, 
  sql, 
  listOfTuples, 
  template='(%s, st_makepoint(%s, %s), %s)'
)
© www.soinside.com 2019 - 2024. All rights reserved.