我注意到的特殊情况是,在sqlAlchemy会话中无法识别对会话之外的 (例如在MySQL' Workbench中创建的)所做的任何更改。我必须关闭并打开sqlAlchemy的新会话来识别它。
例如,我手动删除的行仍然是从sqlAlchemy中提取的。
这是我初始化会话的方式:
engine = create_engine('mysql://{}:{}@{}/{}'.format(username, password, host, schema), pool_recycle=3600)
Session = sessionmaker(bind=engine)
session = Session()
metadata = MetaData()
如何让sqlAlchemy识别它们?
我的sqlAlchemy版本是0.9.4,我的MySQL版本是5.5.34。我们只使用sqlAlchemy的核心(没有ORM)。
答案 0 :(得分:8)
为了能够从其他事务中读取已提交的数据,您需要将事务隔离级别设置为READ COMMITTED
。对于sqlalchemy和mysql:
使用create_engine()
设置隔离级别:
engine = create_engine(
"mysql://scott:tiger@localhost/test",
isolation_level="READ COMMITTED")
使用每个连接执行选项进行设置:
connection = engine.connect()
connection = connection.execution_options(
isolation_level="READ COMMITTED")