我正在向PostgreSQL数据库中插入一个字典列表。该列表将快速增长,dict值(列)的数量约为30。简化后的数据:
projects = [
{'name': 'project alpha', 'code': 12, 'active': True},
{'name': 'project beta', 'code': 25, 'active': True},
{'name': 'project charlie', 'code': 46, 'active': False}
]
使用下面的代码将数据插入PostgreSQL数据库确实有效(如在这个answer中),但是我担心执行太多的查询。
for project in projects:
columns = project.keys()
values = project.values()
query = """INSERT INTO projects (%s) VALUES %s;"""
# print(cursor.mogrify(query, (AsIs(','.join(project.keys())), tuple(project.values()))))
cursor.execute(query, (AsIs(','.join(columns)), tuple(values)))
conn.commit()
还有更好的做法吗?提前感谢您的帮助!
3条答案
按热度按时间6tr1vspr1#
使用execute_values()在单个查询中插入多行。
wnrlj8wa2#
另一个不需要为字典列表处理太多数据的高性能选项是execute_batch(psycopg2version2.7中的新功能)。
例如:
https://www.psycopg.org/docs/extras.html#psycopg2.extras.execute_batch
jgwigjjp3#
您可以使用大容量加载使其更快。
https://www.citusdata.com/blog/2017/11/08/faster-bulk-loading-in-postgresql-with-copy/