使用SQLAchemy

时间:2015-05-26 14:46:01

标签: python sqlalchemy

我有一个班级:

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()

我期望在每个测试方法结束时将夹具的范围设置为functiontransaction.rollback()应撤消所有更改对象foo,但这样做似乎不是真的。我在数据库中看到了add_product()函数中添加的产品。

1 个答案:

答案 0 :(得分:0)

这完全是我的错。我没注意桌子是MyISAM的。将引擎更改为InnoDB后,一切都很顺利。