克服 SQLAlchemy 中的 ORM 数据缓存
利用 SQLAlchemy 进行数据管理时,用户可能会遇到一个明显的缓存问题,其中检索的数据保持不变,尽管直接对数据库进行更新。这可能是一个令人费解的困境。
揭晓缓存:了解事务隔离
所经历的行为不是由于 SQLAlchemy 中的显式缓存,而是一个基本特征事务隔离。默认情况下,SQLAlchemy 以事务模式运行。数据修改仅在调用 session.commit() 时写入数据库。
但是,事务隔离引入了一个扭曲。虽然其他活动事务无法立即访问修改后的数据,但即使在提交或回滚自己的事务之后,它们也可能无法看到它。这种现象称为可重复读取,可确保事务维持其已加载的状态,即使实际数据已更改。
禁用感知缓存
而不是真正的缓存,可以通过使用连接池来减轻事务隔离的影响。通过确保所有连接都源自公共池,您可以避免跨不同连接的数据缓存并提高更新的可见性。要启用连接池,请将 pool_recycle 参数设置为非零值。
例如:
engine = create_engine('mysql://user:password@host/db', pool_recycle=3600)
在此实例中,连接将每 3600 秒回收一次,防止数据缓存问题与事务隔离相关。
以上是为什么我在数据库中更改 SQLAlchemy 数据后没有更新?的详细内容。更多信息请关注PHP中文网其他相关文章!