我想為 postgresql 構建一個多值插入,例如:
INSERT INTO mytable
VALUES
(<value a>, <value b>, …, <value x>),
(<value 1>, <value 2>, …, <value n>),
(<value A>, <value B>, …, <value Z>)
我有一本帶元組的字典。
foo = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
如何構建“正確”的插入陳述句?我怎樣才能擺脫括號..-> []
>>> 'INSERT INTO mytable VALUES%s' % [f for f in foo]
'INSERT INTO mytable VALUES[(1, 2, 3), (4, 5, 6), (7, 8, 9)]'
uj5u.com熱心網友回復:
使用快速執行助手之一,它比executemany.
執行值:
import psycopg2
from psycopg2.extras import execute_values
with psycopg2.connect(database='test') as conn:
with conn.cursor() as cur:
execute_values(cur, """INSERT INTO t74179514 (a, b, c) VALUES %s""", foo)
執行批處理:
import psycopg2
from psycopg2.extras import execute_batch
with psycopg2.connect(database='test') as conn:
with conn.cursor() as cur:
execute_batch(cur, """INSERT INTO t74179514 (a, b, c) VALUES (%s, %s, %s)""", foo)
uj5u.com熱心網友回復:
",".join([f"({f[0]}, {f[1]}, {f[2]})" for f in foo])
將產生你想要的字串
'(1, 2, 3),(4, 5, 6),(7, 8, 9)'
您可以將其與前綴字串連接以獲得您想要的結果。
'INSERT INTO mytable VALUES %s' % ",".join([f"({f[0]}, {f[1]}, {f[2]})" for f in foo])
我的建議是可能有辦法批量插入資料庫。嘗試搜索和閱讀您正在使用的框架的檔案
注意:處理 sql 注入
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519446.html
