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

Python脚本中SQL执行成功但未提交,表未删除问题排查

解决Python中执行SQL删除表无效果的问题

核心原因

SQLAlchemy创建的连接默认处于事务模式,DDL操作(如DROP TABLE)需要显式提交才能生效,而SSMS默认是自动提交模式,这是两边执行结果不同的关键。

解决方案

方案1:手动提交事务

在执行SQL后添加提交操作,确保修改生效:

engine_azure2 = create_engine(conn_str2,echo=True)
conn2 = engine_azure2.connect()

deleteQuery = text("DECLARE @sql NVARCHAR(max)='' SELECT @sql += ' Drop table ' + QUOTENAME(TABLE_SCHEMA) + '.'+ QUOTENAME(TABLE_NAME) + '; ' FROM   INFORMATION_SCHEMA.TABLES WHERE  TABLE_TYPE = 'BASE TABLE' Exec Sp_executesql @sql")
conn2.execute(deleteQuery)
conn2.commit()  # 显式提交事务
conn2.close()   # 执行完成后关闭连接

方案2:使用上下文管理器(推荐)

通过with语句管理连接,自动处理事务的提交与回滚,代码更简洁安全:

engine_azure2 = create_engine(conn_str2,echo=True)

deleteQuery = text("DECLARE @sql NVARCHAR(max)='' SELECT @sql += ' Drop table ' + QUOTENAME(TABLE_SCHEMA) + '.'+ QUOTENAME(TABLE_NAME) + '; ' FROM   INFORMATION_SCHEMA.TABLES WHERE  TABLE_TYPE = 'BASE TABLE' Exec Sp_executesql @sql")

with engine_azure2.connect() as conn2:
    conn2.execute(deleteQuery)
    conn2.commit()

额外排查点

如果提交后仍无效果,可检查:

  • 是否存在外键约束导致表无法删除(此时SQL应返回错误,可通过echo=True的日志查看执行细节)
  • 连接字符串是否指向了正确的数据库实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:42