給定一個整數串列,我想將每個整數插入到 Postgres 表中的新行中,理想情況下以一種非常有效的方式(即不回圈并插入 1-by-1)。arr = [1,2,3,4,5]. 我嘗試做的是將其轉換為元組串列arr2 = [(i,) for i in arr], and then feeding this into postgres with cur.execute("INSERT INTO my_table (my_value) VALUES (%s)", arr2, but I am receiving an error: 并非所有引數在字串格式化程序中都轉換了` 。我到底做錯了什么?
完整代碼
import psycopg2
conn = psycopg2.connect(host="myhost", database="mydb", user="postgres", password="password", port="5432")
cur = conn.cursor()
arr = [1,2,3,4,5]
arr2 = [(i,) for i in arr]
cur.execute("INSERT INTO my_table (my_value) VALUES (%s)", arr2
uj5u.com熱心網友回復:
我到底做錯了什么?
您正在嘗試將整數串列插入到一行中。
相反,使用execute_values()在單個查詢中插入多行。不要忘記提交插入:
#...
cur = conn.cursor()
arr = [1,2,3,4,5]
arr2 = [(i,) for i in arr]
from psycopg2.extras import execute_values
execute_values(cur, "INSERT INTO my_table (my_value) VALUES %s", arr2)
conn.commit() # important!
uj5u.com熱心網友回復:
我還不熟悉 psycopg2,正在研究它,但還有一段路要走。所以我就給出純sql版本。Postgres 有一組很好的內置陣列函式,其中一個是 UNNEST()。該函式將陣列作為引數并回傳各個條目。所以你只需要為查詢提供一個陣列。(見演示)。
insert into my_table(my_column)
select unnest( array [1,2,3,4,5] );
借用(即復制)您的代碼可能:
import psycopg2
conn = psycopg2.connect(host="myhost", database="mydb", user="postgres", password="password", port="5432")
cur = conn.cursor()
arr = [1,2,3,4,5]
cur.execute("insert into my_table (my_column) select unnest (array [%s])", arr
但我不確定這是否得到 Postgres 陣列結構;它需要 []。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/363755.html
標籤:蟒蛇-3.x PostgreSQL的 psycopg2
