我有一个字典列表,这些字典具有要插入到PSQL数据库中的相同键(用Python内置)。键名与PSQL数据库的列一致。有人可以建议一些有效的方法吗?
答案 0 :(得分:1)
您可以使用C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA
方法。使用.executemany
的示例:
psycopg2
cursor.executemany(
'INSERT INTO mytable (field_a, field_b, filed_c) '
'VALUES (%(field_a)s, %(field_b)s, %(field_c)s)',
data
)
是您的字典列表。
答案 1 :(得分:1)
您可以在PSQL中使用executemany
一次插入多个记录,如下所示:
conn=psycopg2.connect("dbname='db_name' user='db_user' password='db_pass'")
data = [{"col1":"data11", "col2":"data21"},
{"col1":"data12", "col2":"data22"},
{"col1":"data13", "col2":"data23"}]
cur = conn.cursor()
cur.executemany("""INSERT INTO bar(col1,col2) VALUES (%(col1)s, %(col2)s)""", data)
如果您没有dict
结构,则需要确保数据按以下顺序正确排列在表中的列中:
cur.executemany(
"""INSERT INTO bar(col1,col2)
VALUES (%s,%s)""", data)
,数据的格式应为:
data = [['data11', 'data21'], ['data12', 'data22']]
这是您要尝试做的吗?让我知道,它有效。
答案 2 :(得分:0)
来自docs:
executemany()
的当前实现方式(使用非常慈善的轻描淡写)并不是特别有效。
根据this线程,您应该使用cursor.copy_from
或extras.execute_values
执行单个批量插入。
copy_from
data = [{'col1': 1, 'col2': 2}, {'col1': 3, 'col2': 4}, {'col1': 5, 'col2':6}]
f = IteratorFile(("{0}\t{1}".format(k['col1'], k['col2']) for k in data.keys()))
cursor.copy_from(f, 'table_name', columns=('col1', 'col2'))
与cursor.execute
相比,请参见here进行基准测试。
execute_values
data = [{'col1': 1, 'col2': 2}, {'col1': 3, 'col2': 4}, {'col1': 5, 'col2':6}]
insert_query = 'insert into table_name (a, b) values %s'
psycopg2.extras.execute_values(
cursor, insert_query, [tuple(d) for d in data]
)