2016-12-07 1 views
0

나는 동시에 업데이트하고 싶은 몇 가지 모델이 있습니다. 먼저 데이터베이스에서 간단한 데이터를 가져옵니다.SQLite로 Peewee 공중 공중 충돌

s = Store.get(Store.id == store_id) 
new_book = Book.get(Book.id == data[book_id']) 
old_book = Book.get(Book.id == s.books.id) 

실제 스키마는 여기에 관계가 없습니다. 그리고 나는이 모델에 대한 일부 업데이트를하고 마지막에 나는 그들 셋 모두 저장 :

s.save() 
new_book.save() 
old_book.save() 

쓰기 작업이 단일 트랜잭션으로 오므되도록 이러한 작업은 @db.atomic() 장식을 사용하여 처리하는 기능입니다. 문제는 내가 get() DB에서 데이터와 수정 된 데이터를 저장하는 지점 사이에 다른 프로세스가 이미 DB에서 이러한 모델로 변경된 경우입니다. 기본 DB 행이 변경되지 않은 경우에만 해당 쓰기 (.save() 작업)를 실행할 수 있습니까? 내가 그들의 last_changed 값을 읽을 수 있지만, 다시 이것을 할 방법이 있습니까 동시에 업데이 트합니까? 그리고 데이터가 변경된 경우 단순히 예외를 throw합니까?

+0

'last_changed'가 원래 레코드를 읽을 때와 동일한 지 확인하는 조건으로 'UPDATE' SQL을 수정합니다. – joeb

+0

@joeb 특히 두 개의 다른 테이블을 업데이트 할 때 Peewee에서 어떻게 보이는지 보여주는 예가 있습니까? – mart1n

+0

필자는 Peewee에 익숙하지 않지만 http://stackoverflow.com/a/27528623/174652와 http://stackoverflow.com/questions/7079540/sqlite-atomically-read-and-update-a-를 확인하십시오. 계수기 – joeb

답변

관련 문제