将Python字典列表插入PSQL数据库

将Python字典列表插入PSQL数据库,python,psql,Python,Psql,我有一个具有相同键(内置于Python中)的字典列表,我希望将其插入到PSQL数据库中。键名称与PSQL数据库的列一致。有人能提出一些有效的建议吗?你可以使用.executemany方法。使用psycopg2的示例: cursor.executemany( 'INSERT INTO mytable (field_a, field_b, filed_c) ' 'VALUES (%(field_a)s, %(field_b)s, %(field_c)s)', data )

我有一个具有相同键(内置于Python中)的字典列表,我希望将其插入到PSQL数据库中。键名称与PSQL数据库的列一致。有人能提出一些有效的建议吗?

你可以使用
.executemany
方法。使用psycopg2的示例:

cursor.executemany(
    'INSERT INTO mytable (field_a, field_b, filed_c) '
    'VALUES (%(field_a)s, %(field_b)s, %(field_c)s)',
    data
)

数据可以是您的dict列表。

您可以使用
.executemany
方法。使用psycopg2的示例:

cursor.executemany(
    'INSERT INTO mytable (field_a, field_b, filed_c) '
    'VALUES (%(field_a)s, %(field_b)s, %(field_c)s)',
    data
)

数据可以是您的dict列表。

您可以使用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']]

这就是你想做的吗?让我知道,它是有效的

您可以在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']]
这就是你想做的吗?让我知道,它是有效的

来自:

executemany()
的当前实现(使用极为宽厚的轻描淡写方式)的性能并不特别好

根据线程,您应该使用
游标。从
附加程序复制\u。执行执行单个批量插入的\u值

从中复制

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'))
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]
)
请参阅,了解与
游标相比的基准测试。执行

执行值

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'))
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]
)
从:

executemany()
的当前实现(使用极为宽厚的轻描淡写方式)的性能并不特别好

根据线程,您应该使用
游标。从
附加程序复制\u。执行执行单个批量插入的\u值

从中复制

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'))
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]
)
请参阅,了解与
游标相比的基准测试。执行

执行值

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'))
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]
)

正是我想要的,非常感谢;)正是我想要的,非常感谢;)请将答案标记为正确,然后关闭线程。我很高兴它能帮到你。如果我只是想从列表(而不是字典列表)中添加值,那么PSQL的语法会是什么呢?是的,我已经标记了它,但我的声誉没有15,所以它不会保存我的意见:(我已经更新了上面的答案。只要确保你的数据列表有正确的列序列:
[[col1,col2],[col1,col2]]
我没有执行上面的代码。如果出现任何错误,请告诉我。请将答案标记为正确并关闭线程。我很高兴它能帮助您解决问题。如果我只想从列表(而不是字典列表)中添加值,那么PSQL的语法是什么?是的,我已经标记了它,但我没有15分的声誉,因此它不会保存我的意见:(我已经更新了上面的答案。只要确保您的数据列表具有正确的列序列:
[[col1,col2],[col1,col2]]]
我没有执行上面的代码。如果出现任何错误,请告诉我。