2017-09-01 120 views
0

我使用psycopg2执行一些PostGIS的查询,但我遇到的问题。比方说,我运行查询:多个值执行SQL查询Psycopg2

cursor.execute("SELECT locations FROM locationtable") 

这给了我一个python变量,这是一个点几何的列表。后来,说我想将它们转换成不同的SRID我希望能够做到:

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

但是这给了我一个错误:

TypeError: not all arguments converted during string formatting

我在这种情况下,我能实现刚刚合并这两个SQL命令,但是这是一个普遍的问题我已经遇到,想知道是否有通过元组的清单,psycopg2并有SQL命令的所有值执行的方式。

+0

该错误可能是因为第一次查询返回一个列表(我猜),并尝试将该列表传递给一个占位符。 'executemany'工作吗? – roganjosh

回答

1

这可能与方法executemany工作:

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

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

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

执行时,它并没有给我任何错误,但由于某种原因进行读取时,它说没有什么可获取。我在psycopg2文档中看到executemany并不比在for循环中使用execute更快,所以我决定只是这样做,因为它更容易。 – Bootstrap

+0

是的,这可能是更容易的环路和执行,在你需要一个循环的每个情况下,选择什么是更灵活 – PRMoureu