pymysql中使用excutemany批量插入数据和避免重复项

在处理大量数据插入到MySQL时,使用executemany()比execute更有效率。executemany()接受SQL语句和参数列表,参数是元组的列表,适合批量操作。如果遇到Duplicateentry异常,可使用INSERTIGNORE来避免重复插入并忽略已有记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行大量数据插入MySQL中时,使用excute的效率非常低,所以将列表数据插入数据库中可以使用excutemany()。
关于excute和excutemany的执行效率可以参考以下博客
Python使用pymysql模块的executemany()方法批量插入数据 提高Mysql数据库写入效率

再此介绍以下excutemany()方法:
executemany(query,args):能同时执行多条语句,强烈建议执行多条语句时使用executemany()。

  • query:sql语句
    例如: ‘INSERT INTO TABLE(id,language) values(%s,%s)’
  • args:模板字符串的参数,是一个列表,列表中的每一个元素必须是元组!!!
    例如:[(1,‘Java’),(2,‘Python’),(3,‘Golang’),(4,‘C’),(5,‘C++’)]

如果是嵌套列表可以使用以下方法将列表数据转为元组数据

results = [[1, ‘Java’], [2, ‘Python’], [3, ‘GoLang’], [4, ‘C’], [5, ‘C++’]]
print(list(map(tuple, results)))
输出结果:
[(1, ‘Java’), (2, ‘Python’), (3, ‘GoLang’), (4, ‘C’), (5, ‘C++’)]

executemany()的使用

db = pymysql.connect(host='localhost', user='root', password='001314', database='flask')
    cursor = db.cursor()
sql = "insert into tablename(id,keywords) value(%s,%s)"
results = [(1,'Java'),(2,'Python'),(3,'GoLang'),(4,'C'),(5,'C++')]
try:
    cursor.executemany(sql,results)
except:
    db.rollback()
    print("插入失败", e)
finally:
    db.commit()
    cursor.close()
    db.close()

以上代码当执行executemany出现Duplicate entry异常时,插入失败。
如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:
INSERT IGNORE INTO TABLE(id,language) values(%s,%s)
这样当有重复记录就会忽略,执行后返回数字0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值