2017-09-01 82 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