У меня есть служба 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 –
В этом документе ничего не говорится о том, что вы ограничены одной моделью. В примерах используется только одна модель, поэтому они понятны. –