그 방법에는 데이터베이스에 세 가지 모델 레코드를 삽입하는 방법이 있습니다. 하지만 일부 예외 또는 오류가 발생하면 db에서이 삽입 트랜잭션을 롤백해야합니다. 다음은 메소드의 사례입니다.GAE에서 롤백 데이터 저장소 PUT 트랜잭션 파이썬 웹
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.
여기 모델 1, 모델 2 및 Model3는 google.appengine.ext.ndb.Model 연장 모델 클래스이다. logic1 code block
에서 예외가 발생했다고 가정하면이 logic1 code block
을 실행하기 전에 model1
이 롤백되어야하기 때문에 삽입해야합니다. 마찬가지로 logic2 code block
에서 예외가 발생한 경우 model1 & model2
이상이 롤백되어야합니다. 내 문제는 매우 흔합니다. 나는 많은 검색을했지만 어떤 해결책도 찾을 수 없었다. 나는 파이썬과 GAE에서 완전히 새로운 편이다. 도와주세요.
나는 "많은 검색"을했지만 해결책을 찾지 못했다고 생각합니다. "NDB Transaction"에 대한 간단한 검색은 [이 페이지] (https://cloud.google.com/appengine/docs/python/ndb/transactions)를 반환합니다. –
빠른 응답에 감사드립니다. 그러나 나는 그것이 나를 돕지 않는다고 생각한다. 데이터베이스에 레코드를 삽입 한 후 오류가 발생하면 삽입 된 레코드를 롤백하고 싶습니다. @ ndb.transactional을 사용할 때 작동하지 않습니다. 문서 링크 대신 대답을위한 해결책이나 아이디어를 주면 도움이 될 것입니다. –
예외를 발생시킬 수있는 모든 로직 주위에 데코레이터를 배치합니다. –