2
我有webapp2服務,其中在不相互依賴的多個NDB模型中插入條目。 現在我們要求的是服務應該在交易中。這是服務的東西失敗,那麼就應該恢復完整的交易 (例如,如果插在第一&第二模型和交易後的項目失敗,那麼它應該刪除的記錄在第一個模型插入。)ndb事務支持在同一事務中更新/回滾多個ndb模型條目
我看着進入ndb交易,但看起來沒有用,因爲它一次只能用於一個模型。此外,我還研究了跨組交易,但這不是我的數據結構所必需的。
例如
模型結構
class ModelTestA(ndb.Model):
field1 = ndb.StringProperty()
field2 = ndb.StringProperty()
class ModelTestB(ndb.Model):
field1 = ndb.StringProperty()
field2 = ndb.StringProperty()
webapp2的服務
from google.appengine.ext import ndb
from google.appengine.api import datastore_errors
@ndb.transactional(xg=True)
def put_entity():
try:
testa_obj = ModelTestA()
testa_obj.field1 = "ModelAF1"
testa_obj.field2 = "ModelAF2"
dbsput(testa_obj)
0/1 # also tried this raise datastore_errors.TransactionFailedError('The transaction could not be committed. Please try again.')
testb_obj = ModelTestB()
testb_obj.field1 = "ModelBF1"
testb_obj.field2 = "ModelBF2"
dbsput(testb_obj)
except Exception as e:
logging.info(e)
class TransactionTesting(webapp2.RequestHandler):
def get(self):
put_entity()
任何想法?
您是如何得出結論:交易僅限於一種模式? –
基於文檔,它將是單一的模型。 https://cloud.google.com/appengine/docs/python/datastore/transactions –
該文檔中沒有任何內容說明您僅限於單一模型。這些例子只使用一個模型,因此它們很清楚。 –