psycopg2 - 将字典列表插入 PosgreSQL 数据库。处决太多?

Hoe*_*nie 8 python postgresql psycopg2

我正在将字典列表插入 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}
]
Run Code Online (Sandbox Code Playgroud)

使用以下代码将数据插入 PostgreSQL 数据库确实有效(如本答案所示),但我担心执行太多查询。

projects = [
{'name': 'project alpha', 'code': 12, 'active': True},
{'name': 'project beta', 'code': 25, 'active': True},
{'name': 'project charlie', 'code': 46, 'active': False}
]
Run Code Online (Sandbox Code Playgroud)

有没有更好的做法?非常感谢您的帮助!

kli*_*lin 8

使用execute_values()在单个查询中插入数百行。

import psycopg2
from psycopg2.extras import execute_values

# ...

projects = [
{'name': 'project alpha', 'code': 12, 'active': True},
{'name': 'project beta', 'code': 25, 'active': True},
{'name': 'project charlie', 'code': 46, 'active': False}
]

columns = projects[0].keys()
query = "INSERT INTO projects ({}) VALUES %s".format(','.join(columns))

# convert projects values to sequence of seqeences
values = [[value for value in project.values()] for project in projects]

execute_values(cursor, query, values)
conn.commit()
Run Code Online (Sandbox Code Playgroud)