我的程序使用dirty read
通过repeatable read
交易观察MySQL
。
工具版
SQLAlchemy
v1.1,MySQL
v5.7,Python
v2.7。
计划行为
我的server.py
正在运行作业,并定期更新进度而不提交。奇怪的是,我的client.py
可以实时读取未提交的更新。
示例代码(简体)
orm_models.py
@declarative.as_declarative()
class Job(object):
__tablename__ = 'job'
job_id = Column(Integer, primary_key=True)
progress = Column(Integer, default=0)
connector.py
def session_scope():
session = SESSION_FACTORY()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
server.py
with session_scope() as session:
job = session.query(Job).get(1)
# Increment job progress periodically, not production code.
for i in range(10):
job.progress += 10
session.flush() # Only flush.
time.sleep(1)
client.py
with session_scope() as session:
job = session.query(Job).get(1)
logging.info(job.progress)
session
的隔离级别为repeatable read
,这是默认值。如果我按顺序运行client.py
,我可以获得作业进度10, 20, ...90, 100
,这是未提交的更改。那么我的client.py
怎么做dirty read
?