我刚刚阅读了GAE最佳做法的精彩摘要:https://cloud.google.com/datastore/docs/best-practices
其中一个是:
如果事务失败,请确保尝试回滚事务。 回滚可以最大限度地减少不同请求的重试延迟 争夺交易中的相同资源。注意一个 回滚本身可能会失败,因此回滚应该是最好的努力 只尝试。
我认为交易回滚是GAE为你做的事情,但上面的引言说你应该自己做。
文档here也说你应该做回滚,但没有说明如何。
那么,如何在GAE Python中回滚事务?
答案 0 :(得分:1)
最佳做法文档是直接通过其API或客户端库使用Cloud Datastore。
仅在灵活的Appengine环境中才需要这样做。即使在这种情况下,Cloud Datastore client library也提供了一个自动处理回滚的上下文管理器 - 这个示例代码来自the docs
def transfer_funds(client, from_key, to_key, amount):
with client.transaction():
from_account = client.get(from_key)
to_account = client.get(to_key)
from_account['balance'] -= amount
to_account['balance'] += amount
client.put_multi([from_account, to_account])
docs州:
默认情况下,如果事务块退出时出现错误,则回滚事务
请注意,客户端库仍处于测试阶段,因此以后行为可能会发生变化。
在标准的Appengine环境中,ndb库提供了automatic transaction rollback:
NDB客户端库可以在单个事务中对多个操作进行分组。除非事务中的每个操作都成功,否则事务不会成功;如果任何操作失败,则会自动回滚事务。