我正在尝试为应用引擎数据存储区编写一个事务方法,但很难测试它是否正常工作,所以我首先尝试验证我的方法。我有一个post请求,检查属性是否为true,如果不是true,则执行其他操作并将其设置为true。
def post(self):
key = self.request.get('key')
obj = db.get(key)
if obj.property is False:
update_obj(ojb.key()) // transactional method to update obj and set value to True
if obj.property is True:
// do something else
答案 0 :(得分:3)
我发布了一些添加了评论的代码
def post(self):
key = self.request.get('key')
# this gets the most recent entity using the key
obj = db.get(key)
if not obj.property:
# You should do the most recent check inside the transaction.
# After the above if-check the property might have changed by
# a faster request.
update_obj(ojb.key()) # transactional method to update obj and set value to True
if obj.property:
# do something else
将事务视为一个将全部执行或全部失败的实体上的一组操作。
交易确保其中的任何内容保持一致。如果某些事物改变了实体并且变得与实体不同,则交易将失败然后再次重复。
如果我理解你需要的另一种方法:
def post(self):
key = self.request.get('key')
self.check_obj_property(key)
# continue your logic
@db.transctional
def check_obj_property(key):
obj = db.get(key)
if obj.property:
#it's set already continue with other logic
return
# Its not set so set it and increase once the counter.
obj.property = True
# Do something else also?
obj.count += 1
# Save of course
obj.put()
如您所见,我已将所有支票放入交易中。
如果上述代码同时运行,则只会增加计数一次。
想象一下它就像一个计数器,计算obj.property
被设置为True
的次数