SQL批量插⼊数据,有则更新(update),没有则插⼊
(insert)的问题
最近在写⼀个爬⾍,涉及到⼤概每天50W条数据的爬取然后进⾏数据更新和插⼊,数据库是MySQL,因为SQL语句写的不是很6,所以百度到这样的需求可以⽤INSERT 中ON DUPLICATE KEY UPDATE 的语句进⾏不在数据库的数据进⾏插⼊和已有数据的更新,语句这⾥就不多说了,⽹上很多这样的⽂章,以下直接上问题:
这是插⼊语句,url是主键:
imgsaves, url, link) values( %s, %s, %s, %s, %s, %s)""",
(param, created_at, repin_count, imgsaves, url, link))
如果url重复那么除了param和url其他字段全部需要更新,这是⽂档给出的格式写的SQL语句,遗憾的是这是错误的...试了⼏个格式化⽅法没有成功...
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:
批量更新sql语句
url, link) values(%s, %s, %s, %s, %s, %s)""",
(param, created_at, repin_count, imgsaves, url, link))
except:
imgsaves='%s', link='%s' where user='%s' and url='%s'""" % (
created_at, repin_count, imgsaves, link, param, url))
这种复杂的SQL语句实在⽆爱...有⼤佬会的望指点⼀⼆不胜感激

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。