You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中获取MySQL查询产生的警告信息

Django Admin 读取MySQL执行警告的解决方案

错误原因

Django封装的数据库游标并非MySQL官方驱动的原生游标实例,因此没有内置的fetchwarnings方法,直接调用会抛出属性不存在错误。

可行实现方案

方案1:直接执行SHOW WARNINGS查询(通用兼容)

该方案不依赖驱动提供的API,直接通过MySQL原生指令读取警告,适配所有MySQL驱动:

from django.db import connection

query = "DELETE IGNORE FROM 你的表名 WHERE 筛选条件"
with connection.cursor() as cursor:
    # 执行删除语句
    cursor.execute(query)
    # 执行原生指令获取所有警告
    cursor.execute("SHOW WARNINGS")
    # 读取警告结果
    warnings = cursor.fetchall()
    return warnings

返回的warnings是元组列表,每个元组结构为 (警告等级, 错误码, 错误描述),外键约束删除失败对应的错误码为1451,可自行筛选处理。

方案2:获取原生游标调用API

如果你确定使用的是mysql-connector-python驱动,可以通过Django游标拿到原生驱动实例调用对应方法:

from django.db import connection

query = "DELETE IGNORE FROM 你的表名 WHERE 筛选条件"
# 开启警告记录
connection.get_warnings = True

with connection.cursor() as cursor:
    # 获取原生驱动游标
    native_cursor = cursor.connection.cursor()
    native_cursor.execute(query)
    # 调用原生方法读取警告
    warnings = native_cursor.fetchwarnings()
    return warnings

注意事项

  • DELETE IGNORE的返回值仅为成功删除的行数,不会包含因约束跳过的条目数量,必须通过警告信息才能获取删除失败的记录详情。
  • 若需要精准定位删除失败的具体条目,可以从警告描述的文本中提取对应主键、外键值匹配。

内容的提问来源于stack exchange,提问作者IndigoFenix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:01