3
我很困惑如何從多個不同的進程併發修改表。我試過使用Query.with_lockmode()
,但似乎沒有做到我期望的那樣做,這將阻止兩個進程同時查詢相同的行。以下是我已經試過:鎖定在sqlalchemy
import time
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import *
engine = create_engine('mysql://...?charset=utf8&use_unicode=0', pool_recycle=3600, echo=False)
Base = declarative_base(bind=engine)
session = scoped_session(sessionmaker(engine))
class Test(Base):
__tablename__ = "TESTXYZ"
id = Column(Integer, primary_key=True)
x = Column(Integer)
def keepUpdating():
test = session.query(Test).filter(Test.id==1).with_lockmode("update").one()
for counter in range(5):
test.x += 10
print test.x
time.sleep(2)
session.commit()
keepUpdating()
如果我同時兩次運行此腳本,我得到session.query(Test).filter(Test.id==1).one().x
等於50,而不是100(假設它爲0以開始),這是我所希望的。如何讓兩個進程同時更新值或讓第二個進程等待第一個進程完成?
謝謝,這是一個非常愚蠢的錯誤。簡直不敢相信我花了這麼多時間。 – Noah 2009-09-11 15:15:44