ActiveSqlTransactionError含义及DROP/CREATE DATABASE报错咨询
关于ActiveSqlTransaction错误的解析及解决方法
错误含义
这个错误的核心意思是:你要执行的DROP DATABASE或CREATE DATABASE这类数据库级别的DDL操作,正处于一个已经激活的事务(Transaction)块里,但这类操作不允许在事务上下文内执行。
为什么注释DROP后CREATE仍报错?
- 你的数据库连接默认开启了自动事务模式,或者代码在调用
create_database()之前已经隐式启动了事务,导致后续的CREATE DATABASE依然被包裹在事务里。 - 不少数据库驱动(比如针对SQL Server的pymssql、ODBC驱动)会自动为连接开启事务,除非你手动把自动提交(autocommit)设为True。
解决方法
- 显式开启连接的自动提交:创建数据库连接后,直接设置
conn.autocommit = True,这样执行DROP/CREATE DATABASE时就不会被事务包裹。 - 如果业务需要用事务,那在执行数据库级DDL操作前,先手动提交或回滚当前事务,确保事务处于结束状态,再执行这些操作。
- 检查
create_database()函数内部,有没有其他语句触发了事务开启(比如之前的增删改操作没提交),导致后续DDL操作被卷入事务。
内容的提问来源于stack exchange,提问作者Onion Rings
相关产品推荐
相关产品推荐

