为何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
相关产品推荐
相关产品推荐

