sqlAlchemy无法识别在会话之外对DB进行的更改

Nob*_*lis 6 python mysql sqlalchemy

我注意到的一些特殊情况是,在会话之外提交给DB的任何更改(例如在MySQL的Workbench中创建的更改)都无法在sqlAlchemy会话中识别.我必须关闭并打开sqlAlchemy的新会话来识别它.

例如,仍然从sqlAlchemy获取我手动删除的行.

这是我初始化会话的方式:

engine   = create_engine('mysql://{}:{}@{}/{}'.format(username, password, host, schema), pool_recycle=3600)
Session  = sessionmaker(bind=engine)
session  = Session()
metadata = MetaData()
Run Code Online (Sandbox Code Playgroud)

如何让sqlAlchemy识别它们?

我的sqlAlchemy版本是0.9.4,我的MySQL版本是5.5.34.我们只使用sqlAlchemy的Core(没有ORM).

pav*_*orm 8

为了能够从其他事务中读取已提交的数据,您需要将事务隔离级别设置为READ COMMITTED.对于sqlalchemy和mysql:

使用create_engine()以下方法设置隔离级别

engine = create_engine(
    "mysql://scott:tiger@localhost/test",
    isolation_level="READ COMMITTED")
Run Code Online (Sandbox Code Playgroud)

要使用每个连接执行选项进行设置:

connection = engine.connect()
connection = connection.execution_options(
    isolation_level="READ COMMITTED")
Run Code Online (Sandbox Code Playgroud)

资源