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

posted @ 2022-07-11 17:11  一颗吃不完的糖  阅读(926)  评论(0编辑  收藏  举报