Python 基础教程

Python 高级教程

Python 相关应用

Python 笔记

Python FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/python-pymysql-safe-update-mode-error.html

pymysql 报错 'You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column'

Python 笔记 Python 笔记


python 通过 pymysql 操作数据库表的 update 或 delete 操作时,报错 pymysql.err.InternalError: (1175, 'You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column') 的原因及解决方法。

原因

MySQL 启动了安全更新模式(safe update mode),该模式针对 update 和 delete 操作有如下约束:

  • 针对 update 操作,有如下 2 个约束条件:
    1. 当 where 条件中列(column)没有索引可用,且无 limit 限制时,会拒绝更新;
    2. 当 where 条件为常量,且无 limit 限制时,会拒绝更新。
  • 针对 delete 操作,有如下 3 个约束条件:
    1. 当 where 条件中列(column)没有索引可用,且无 limit 限制时,会拒绝更新;
    2. 当 where 条件为常量,且无 limit 限制时,会拒绝更新;
    3. 当 where 条件为空,且无 limit 限制时,会拒绝更新。

解决方法

如果未关闭数据库的安全更新模式的话,需要避免原因中列出的约束条件。

如果不想修改 sql 语句,那就要关闭数据库的安全更新模式,可以先通过如下命令查看更新模式:

mysql> SHOW VARIABLES LIKE 'sql_safe%';

它会输出如下结果:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| sql_safe_updates | ON   |
+------------------+-------+
1 row in set (0.00 sec)

将打开的安全更新模式进行关闭,进行如下命令:

mysql> SET sql_safe_updates = off;

mysql> SET sql_safe_updates = 0;