如何修正PyMySQL中UPDATE语句触发的1093数据库错误?
解决MySQL UPDATE语句1093错误
这个错误是MySQL的内置限制导致的:当你更新某个表时,不能在WHERE子句的子查询中直接引用这个表作为FROM数据源。要解决这个问题,只需要把获取最大time_created的子查询包装成一个派生表,让MySQL先执行这个派生表的查询,再用结果来匹配更新条件。
修正后的完整代码如下:
import mysql.connector mydb = mysql.connector.connect( host="*****", user="****", password="****", database="database", port="****" ) mycursor = mydb.cursor() mycursor.execute(""" UPDATE table1 SET BUGS=%s, CODE_SMELLS=%s, VULNERABILITIES=%s WHERE username = %s AND time_created = ( SELECT max_time FROM (SELECT MAX(time_created) AS max_time FROM table1) AS temp_table ) """, (bugs, code_smells, vulnerabilities, username)) mydb.commit() mydb.close()
核心修改点是把原来的直接子查询改成嵌套的派生表查询:
(SELECT max_time FROM (SELECT MAX(time_created) AS max_time FROM table1) AS temp_table)
通过新增一层子查询生成临时表temp_table,MySQL会先计算这个临时表的结果,再用于UPDATE的条件判断,就不会触发1093错误了。
内容的提问来源于stack exchange,提问作者Sizzler
相关产品推荐
相关产品推荐

