Извините, что задал этот вопрос, но я не смог найти полезных ответов после поиска этого вопроса.
Я знал, что в сеансе SQLAlchemy, update()
не будет работать, может быть, даже не общаться сбазы данных, пока вы не используете session.commit
.
Вот мой код, я думаю, что навык, который я использую, называется optimistic lock
:
with Session() as session:
# get one record
object = session.query(Table).where(key=param).limit(1)
content = "here is the calculated value of my business"
# update the record by the id of the gotten record
# if 2 thread get the same record and run into this update statement, I think only can success
# because it is ensured by the MySQL MVCC
Table.update(Table).set(Table.content = content).where(id = object.id)
sessoin.commit()
Но у меня возникает вопрос, что если я захочу сделать что-то in the thread which got the lock
послеsession.commit()
?
Например, код, который я ожидаю, выглядит следующим образом:
affected_rows = sessoin.commit()
if affected_rows:
do_something_after_get_lock_success()
Кто-нибудь может помочь?Большое спасибо!^ _ ^