python - sqlAlchemy 无法识别在 session 之外对数据库所做的更改

标签 python mysql sqlalchemy

我注意到的一些奇怪的事情是,在 sqlAlchemy session 中无法识别在 session 之外提交给数据库的任何更改(例如在 MySQL 的 Workbench 中所做的更改)。我必须关闭并打开一个新 session ,以便 sqlAlchemy 识别它。

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

这是我初始化 session 的方式:

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)。

最佳答案

为了能够从其他事务中读取已提交的数据,您需要将事务隔离级别设置为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")

source

关于python - sqlAlchemy 无法识别在 session 之外对数据库所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31179880/

相关文章:

python - sqlalchemy 与 `len(query.all())` 和 `query.count()` 不同的值

python - 使用 SQLAlchemy 跨多个模块处理 scoped_session

python - for循环内和for循环外声明变量的区别

python - 相当于 Python 在 Ruby 中的 "with"

mysql - 从 MySql 查询某些值的 WordPress 简码

mysql - MYSQL 中 POINT 和 GEOMETRYCOLLECTION 对象之间的距离

python - 如何减少 sqlalchemy 用于连接数据库和选择数据的时间

python - 从另一个数据帧映射后如何在列中查找值的总和?

python - 用于 Python 的 RPC 库

mysql - 从 mysql 数据库中删除最新的 X 记录