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

为何MySQL的DELETE语句失效但对应的SELECT语句可正常执行?

为什么pymysql执行DELETE后数据未被删除?

核心原因是事务未提交,另外代码里还有一处查询逻辑的问题,具体说明如下:

  • 事务未提交:pymysql默认关闭自动提交(autocommit=False),执行DELETE这类写操作后,必须手动调用connection.commit()才能将修改持久化到数据库。你的代码仅执行了cursor.execute(),没有提交事务,当连接关闭时,数据库会自动回滚未提交的事务,导致删除操作相当于从未执行。

    修复后的删除逻辑代码:

    try:
        cursor.execute("DELETE FROM Basic WHERE Date = '2022-11-25 04:00:00';")
        connection.commit()  # 新增事务提交语句
    except Exception as ex:
        print("Exception occured: %s" %ex)
        connection.rollback()  # 异常时回滚事务,避免脏数据
    finally:
        connection.close()
    
  • 查询逻辑错误:你在查询时先关闭了数据库连接,再调用cursor.fetchall(),这会导致无法获取数据(cursor依赖活跃的数据库连接)。正确的做法是先获取查询结果,再关闭连接:

    # 修复后的查询代码
    connection = pymysql.connect(**conf)
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM Basic WHERE Date = '2022-11-25 04:00:00'")
    result = cursor.fetchall()  # 先获取结果
    connection.close()
    df = pd.DataFrame(result, columns = ["Date", "State", "Price", "Demand"])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:10:40