我有一个班级:
import sqlalchemy as sa
class Foo:
def __init__(...):
self.engine = sa.create_engine('...')
self.conn = self.engine.connect()
在类中,有一种方法可以处理事务中的数据:
def add_product(...):
with self.conn.begin():
self.conn.execute(self.product_table.insert(), ...)
我在py.test中进行了测试,所以在每次测试后我想回滚代码在测试中所做的所有更改,所以我创建了一个yield fixture:
@yield_fixture(scope='function'):
def mocked_foo():
foo = Foo(...)
transaction = foo.conn.begin()
yield foo
transaction.rollback()
我期望在每个测试方法结束时将夹具的范围设置为function
,transaction.rollback()
应撤消所有更改对象foo
,但这样做似乎不是真的。我在数据库中看到了add_product()
函数中添加的产品。
答案 0 :(得分:0)
这完全是我的错。我没注意桌子是MyISAM的。将引擎更改为InnoDB
后,一切都很顺利。