该方法中有一个方法我将三个不同的模型记录插入数据库。但是如果发生某些异常或错误,我需要从db回滚此插入事务。 以下是方法的展示案例。
def post():
try:
model1 = Model1()
model1.key1 = 'key1'
model1.key2 = 'key2'
model1.put()
#some logic1 code block goes here
.
.
model2 = Model2()
model2.key2 = 'key2'
model2.key2 = 'key2'
model2.put()
#some logic2 code block goes here
.
.
model3 = Model3()
model3.key3 = 'key3'
model3.key3 = 'key3'
model3.put()
#some logic3 block goes here
.
.
except Exception:
#all the database insertion transaction which happened should be rollback here.
这里Model1,Model2和Model3是google.appengine.ext.ndb.Model扩展模型类。
现在假设logic1 code block
中发生了异常,那么model1
应该回滚,因为它是在执行此logic1 code block
之前插入的。同样,如果logic2 code block
中发生异常,那么model1 & model2
以上的两个都应该回滚,依此类推。我的问题非常普遍。我做了很多搜索,但无法找到任何解决方案。我完全是Python和GAE的新手。请帮忙。
答案 0 :(得分:-1)
正如@Daniel Roseman链接的那样,答案在NDB Transaction page上。只需搜索“回滚”一词,你就会看到它。
对于您的代码,这意味着:
xg-True
请注意,在装饰器上我已指定myArray[index++] = atoi( line.c_str() );
,因为从您的代码段开始,它看起来很可能是跨实体组事务。如果不是这种情况并且所有实体都具有相同的根祖先,则可以省略它。
另请注意,ndb.Rollback纯粹是一个方便的例外 - 在事务修饰函数中引发的任何异常都会导致回滚。