В этом методе есть один метод. Я вставляю три базы данных в базу данных. Но если произойдет какое-то исключение или ошибка, мне нужно отменить эту транзакцию ввода из db. Ниже показан случай использования метода.Откат Datastore PUT Транзакция в GAE Python Web
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. Пожалуйста помоги.
Я не верю, что вы «много искали», но не смогли найти решение. Простой поиск «транзакции NDB» возвращает [эту страницу] (https://cloud.google.com/appengine/docs/python/ndb/transactions). –
спасибо за ваш быстрый ответ. Но я думаю, что это не помогает мне. Я хочу сделать откат моих вставленных записей, если возникла некоторая ошибка после вставки записей в базу данных. Когда я использовал @ ndb.transactional, он не работал. Это будет более полезно, если вы дадите некоторое решение/идею для ответа вместо ссылки на документацию. –
Вы помещаете декоратор вокруг всей логики, которая может вызвать исключение. –