簡體   English   中英

SQLAlchemy(Postgres)和事務

[英]SQLAlchemy(Postgres) and transaction

我希望從表(隊列)中選擇一條記錄,將其鎖定(沒有其他進程可以編輯此記錄)並在以后的某個時間點進行更新。
我假設如果將整個查詢和更新都放在事務中,那么其他任何進程都無法編輯/查詢同一條記錄。 但是我不太能夠實現這一目標。

def move(one, two):
  from settings import DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME
  from sqlalchemy.orm import sessionmaker, scoped_session
  from sqlalchemy import create_engine
  engine = create_engine('postgres://%s:%s@%s:%s/%s' % (DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME), echo = False)
  conn = engine.connect()
  tran = conn.begin()
  Session = scoped_session(sessionmaker())
  session = Session(bind=conn)
  url = session.query(URLQueue).filter(URLQueue.status == one).first()
  print "Got record: " + str(url.urlqueue_id)
  time.sleep(5)
  url.status = two
  session.merge(url)
  session.close()
  tran.commit()

move('START', 'WIP')

如果我開始2進程,它們都將更新同一條記錄。 我不確定是否正確創建了連接/會話/事務。 有指針嗎?

使您的事務隔離級別可序列化,或通過query.with_lockmode('update')獲取記錄以進行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM