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

使用Python删除MySQL表中日期不等于当前日期的行失败如何解决

原因分析及解决方法

以下是导致操作不生效的常见原因和对应修复方案:

核心常见原因

  • 未提交事务:Python的MySQL驱动(pymysql/MySQLdb等)默认开启手动事务提交,仅执行execute语句不会将修改同步到数据库,必须调用连接对象的commit方法才会生效。
  • 关键字未转义:Date属于MySQL保留关键字,作为字段名使用时需要用反引号包裹,避免语法解析异常。
  • 字段类型不匹配:如果Date字段是DATETIME/TIMESTAMP类型,存储有时分秒信息,直接和日期字符串对比会出现匹配偏差,需要先用DATE()函数提取日期部分再比较。
  • SQL拼接风险:直接拼接SQL字符串容易出现引号转义错误,还存在SQL注入风险,推荐使用参数化查询写法。

正确实现代码

方案1:使用MySQL内置日期函数(推荐,避免Python和数据库时区不一致问题)

# 注:表名无法参数化,League变量请提前做白名校验避免注入风险
sql = f"DELETE FROM `{League}` WHERE DATE(`Date`) != CURDATE()"
mycursor.execute(sql)
# 必须执行事务提交
mydb.commit() # mydb为你创建的MySQL连接对象

方案2:使用Python生成的日期参数

import time
current_date = time.strftime('%Y-%m-%d')
sql = f"DELETE FROM `{League}` WHERE DATE(`Date`) != %s"
# 参数化查询,自动处理引号转义
mycursor.execute(sql, (current_date,))
# 提交事务
mydb.commit()

验证方法

执行删除后可通过print(mycursor.rowcount)查看实际删除的行数,确认操作效果。测试阶段建议先把SQL中的DELETE换成SELECT *,确认匹配的行符合预期后再执行删除操作,避免误删数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:09:01