Python 如何使SQLAlchemy Transaction.rollback()删除它创建的表?

Python 如何使SQLAlchemy Transaction.rollback()删除它创建的表?,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,我希望单元测试在完成之后进行清理。 为此,我使用SQLAlchemy的Transaction.rollback()方法。它确实会回滚表内容中的任何更改。 但是,在事务期间创建的表不会被删除。 有什么优雅的方法可以通过事务回滚自动删除创建的表吗 在本例中,后端DBMS是Oracle。 在阅读文档后,我怀疑Oracle中DDL操作后的隐式提交。这打破了事务概念一般来说,我认为回滚不会回滚表创建。SQL有两个基本分支,DDL和DML。CREATETABLE等语句被视为数据定义语言(DDL),不受事务的

我希望单元测试在完成之后进行清理。 为此,我使用SQLAlchemy的Transaction.rollback()方法。它确实会回滚表内容中的任何更改。 但是,在事务期间创建的表不会被删除。 有什么优雅的方法可以通过事务回滚自动删除创建的表吗

在本例中,后端DBMS是Oracle。
在阅读文档后,我怀疑Oracle中DDL操作后的隐式提交。这打破了事务概念

一般来说,我认为回滚不会回滚表创建。SQL有两个基本分支,DDL和DML。CREATETABLE等语句被视为数据定义语言(DDL),不受事务的影响。另一方面,像INSERT和UPDATE这样的语句是数据操作语言(DML),这些语句都包含在事务中。我在我的测试模块中执行您需要的操作,我必须与事务分开执行DDL,在测试完成时手动删除新表(或者,在我的情况下,更改,而不是删除)。这正是发生的情况。DDL在回滚过程中不起作用。我实现了手动清理(表删除),就像您所做的一样,它做得很好。谢谢一般来说,我认为回滚不会回滚表创建。SQL有两个基本分支,DDL和DML。CREATETABLE等语句被视为数据定义语言(DDL),不受事务的影响。另一方面,像INSERT和UPDATE这样的语句是数据操作语言(DML),这些语句都包含在事务中。我在我的测试模块中执行您需要的操作,我必须与事务分开执行DDL,在测试完成时手动删除新表(或者,在我的情况下,更改,而不是删除)。这正是发生的情况。DDL在回滚过程中不起作用。我实现了手动清理(表删除),就像您所做的一样,它做得很好。谢谢