如何用Psycopg2实现批量插入不存在于表中的数据?
使用Psycopg2批量插入不存在的数据
要安全高效地将元组列表转换为SQL VALUES子句并执行条件插入,推荐使用Psycopg2的execute_values方法(来自psycopg2.extras模块),它能自动处理元组的格式化,同时避免SQL注入风险。
步骤示例:
- 导入必要模块
from psycopg2 import connect from psycopg2.extras import execute_values
- 准备待插入的元组数据
data_to_insert = [('hello', 123), ('hey', 123)]
- 编写带参数的SQL查询
将VALUES部分用%s作为占位符,execute_values会自动替换为正确格式化的元组列表:
INSERT INTO keywords(name, proj_id) SELECT d.name, d.proj_id FROM (VALUES %s) AS d(name, proj_id) WHERE NOT EXISTS ( SELECT 1 FROM keywords u2 WHERE u2.name = d.name AND u2.proj_id = d.proj_id )
- 执行插入操作
# 建立数据库连接 conn = connect("dbname=你的数据库名 user=用户名 password=密码") cur = conn.cursor() # 执行批量插入 execute_values(cur, query, data_to_insert) # 提交事务并关闭连接 conn.commit() cur.close() conn.close()
关键说明:
execute_values会自动将元组列表转换为('hello',123),('hey',123)的格式,无需手动拼接字符串。- 该方法支持大量数据的批量插入,比单条插入效率更高。
- 自动处理字符串转义,彻底避免SQL注入问题。
内容的提问来源于stack exchange,提问作者Bibin Hashley O P
相关产品推荐
相关产品推荐

