SQL批量插入数据,有则更新(update),没有则插入(insert)的问题

本文探讨了在MySQL中使用INSERT ON DUPLICATE KEY UPDATE语句进行数据更新和插入的优化方法,针对每日50万条数据的爬虫场景,提出了避免查询比对的高效策略。

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

最近在写一个爬虫,涉及到大概每天50W条数据的爬取然后进行数据更新和插入,数据库是MySQL,因为SQL语句写的不是很6,所以百度到这样的需求可以用INSERT 中ON DUPLICATE KEY UPDATE 的语句进行不在数据库的数据进行插入和已有数据的更新,语句这里就不多说了,网上很多这样的文章,以下直接上问题:

这是插入语句,url是主键:

cursor.execute("""insert into yyc_pinzhanghao(user, created_at, repin_count, 
    imgsaves, url, link) values( %s, %s, %s, %s, %s, %s)""", 
    (param, created_at, repin_count, imgsaves, url, link))

如果url重复那么除了param和url其他字段全部需要更新,这是文档给出的格式写的SQL语句,遗憾的是这是错误的...试了几个格式化方法没有成功...

cursor.execute("""insert into yyc_pinzhanghao(user, created_at, repin_count, 
    imgsaves, url, link) values( %s, %s, %s, %s, %s, %s) ON DUPLICATE url UPDATE
    created_at=value(%s), repin_count=value(%s),         
    imgsaves=value(%s), link=value(%s))""", 
    ((param, created_at, repin_count, imgsaves, url, link),created_at, repin_count, 
    imgsaves, link))

为什么不先查询再比对url,因为慢啊,最后只能用笨办法,try语句大法,url不是主键么,重复肯定报错,报错就用update,感觉效率会比先查询再对比再更新或插入快那么一点点...

try:
    cursor.execute("""insert into yyc_pinzhanghao(user, created_at, repin_count, imgsaves,         
    url, link) values(%s, %s, %s, %s, %s, %s)""", 
    (param, created_at, repin_count, imgsaves, url, link))
except:
    cursor.execute("""update yyc_pinzhanghao set created_at='%s', repin_count='%s',     
    imgsaves='%s', link='%s' where user='%s' and url='%s'""" % (
    created_at, repin_count, imgsaves, link, param, url))

这种复杂的SQL语句实在无爱...有大佬会的望指点一二!!!不胜感激

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值