是否可以在peewee+sqlite中嵌套事务?

2024-10-06 12:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

执行下面的代码会产生意外的结果。是因为peewee、sqlite还是我对事务的理解有问题?在

代码创建一个事务,然后调用函数3次,该函数在自己的事务中创建3条记录。函数第1次和第3次成功,但第2次失败。在

我希望在数据库中找到6条记录,其中3条在第一次调用时创建,3条在第三次调用时创建,并且在第二次调用期间创建的记录将被回滚。在

相反,我只找到第三次通话时创建的记录。在

import peewee

class DbTest(peewee.Model):
    test = peewee.CharField()
    class Meta:
        database = db

def test(txt):
    with db.transaction():
        DbTest.create(test=txt + '1')
        DbTest.create(test=txt + '2')
        if txt == 'b':
            raise
        DbTest.create(test=txt + '3')

DbTest().drop_table(True)
DbTest().create_table(True)

with db.transaction():
    for txt in ['a', 'b', 'c']:
        try:
            test(txt)
        except:
            pass

Tags: 函数代码testtxttruedbcreatewith