理解和禁用 SQLAlchemy 中的缓存
在数据库交互领域,SQLAlchemy 偶尔会提出感知缓存的问题。当通过 SQLAlchemy 插入或更新的数据未立即反映在其范围之外所做的更改时,就会发生这种情况。虽然 SQLAlchemy 在事务中使用本地身份映射,但罪魁祸首通常是事务隔离的影响。
SQLAlchemy 的会话默认以事务方式运行。在调用 session.commit() 之前,更改不会持久保存到数据库中。在此期间,并发事务将不会观察到这些修改。然而,事务的隔离性质引入了额外的复杂性。
正在进行的事务不仅不知道未提交的更改,而且即使在提交或回滚后也可能无法识别它们。这是由于可重复读取的概念。在这种情况下,事务会保留其数据的初始快照,从而防止它们反映其他事务中所做的后续更改。
要禁用此隔离行为并强制 SQLAlchemy 检索最新数据,有必要调整数据库连接的事务隔离级别。这可以通过在数据库引擎的配置中设置isolation_level参数来实现。通过降低隔离级别,例如将其设置为“READ COMMITTED”,并发事务将能够观察已提交的更改。
需要注意的是,降低隔离级别可能会引入潜在的并发问题。在进行任何更改之前,请仔细考虑数据一致性和性能之间的权衡。
以上是如何解决 SQLAlchemy 的缓存问题并确保数据立即反映更改?的详细内容。更多信息请关注PHP中文网其他相关文章!