DB 동시 입력시 실패하는 경우?
일단 현재는 에러 확인 처리가 없다.
모든 save(), update() 함수 아래에서 그 결과를 체크하는 루틴을 넣고 필요에 따라 2번 3번 성공할 때 까지 작업을 하도록 하자.
MongoEngine 의 save() 함수는 단순한 insert 가 아니어서 에러 핸들링에 유리하다.
page = Page(title="Test Page")
page.save()
# Performs an insert
page.title = "My Page"
page.save()
# Performs an atomic set on the title field
즉, save 하고, object.id 읽어보고 없다면 다시 save를 그대로 호출하면 DB에 있다면 수정이 되고, 없다면 다시 입력을 할 것이다.
ritem = targetTable(orderitem=orderitem, starttime=item["starttime"], endtime=item["endtime"], serial=item["serial"], box=item["box"])
print(ritem.id, type(ritem.id))
if ritem.id :
print("None 체크 안됨")
else:
print("None 체크")
ritem.save()
print(ritem.id, type(ritem.id))
if ritem.id :
saveconfirm_item = targetTable.objects.get(id=ritem.id)
resultitem['resultid'] = str(saveconfirm_item.id)
resultitem['serial'] = saveconfirm_item.serial
retids.append(resultitem)
>> 결과는?
None <class 'NoneType'> # save 전에는 None 이다.
None 체크 # None 체크가 정상적으로 수행된다.
60dd08ac1649570ca8162e28 <class 'bson.objectid.ObjectId'> # save 이후에는 objectid 가 할당됨
Sonya Livshits 님의 사진, 출처: Pexels