python mysql 8.0.20 批量更新(没有则插入,有则更新)解决values函数过期警告
最近用Python写个小程序练手,其中需要批量将数据添加到MySQL数据库,并且数据还要进行查重,如果不存在则批量插入数据,如果存在则批量更新数据,sql语句如下:
InUpSql = "INSERT INTO testimgs (category,picname,url,downstatus,reviseDate,isInvalid) VALUES " \
"(%s, %s, %s, %s, %s, %s) " \
"ON DUPLICATE KEY UPDATE category = VALUES(category), " \
"picname = VALUES(picname) , reviseDate = VALUES(reviseDate), isInvalid=VALUES(isInvalid)"
sql运行后pymysql报1287警告,但是数据已经插入到数据库
D:\Python\lib\site-packages\pymysql\cursors.py:170: Warning: (1287, “‘VALUES function’ is deprecated and will be removed in a future release. Please use an alias (INSERT INTO … VALUES (…) AS alias) and replace VALUES(col) in the ON DUPLICATE KEY UPDATE clause with alias.col instead”)
查看警告信息,意思是“ VALUES函数”已被弃用,在以后的版本中将被删除,让用别名替换values函数。查看mysql官方文档说明
官方文档介绍values()函数从MySQL 8.0.20开始不推荐使用,因为前段时间用的mysql8.0.13损坏,我重装了mysql为8.0.20版本,所以报了这个警告,修改后的语句如下:
InUpSql = "INSERT INTO testimgs (category,picname,url,downstatus,reviseDate,isInvalid) VALUES " \
"(%s, %s, %s, %s, %s, %s) AS new " \
"ON DUPLICATE KEY UPDATE category = new.category, " \
"picname = new.picname , reviseDate = new.reviseDate,isInvalid= new.isInvalid"
执行结果:
批量测试的10条数据已经全部添加到数据,问题解决。
遇到问题多看文档。O(∩_∩)O哈哈~
附 mysql8.0参考手册 https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
————————————————
原文链接:https://blog.csdn.net/weixin_42450945/article/details/106562941