SQLAlchemy MySQL Dirty Read发生了可重复读取事务

时间:2017-12-14 01:36:52

标签: python mysql transactions sqlalchemy

我的程序使用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

0 个答案:

没有答案