SQLAlchemy对象层缓存

时间:2018-10-17 19:16:47

标签: python python-2.7 sqlalchemy

我将应用程序从SQLObject切换到SQLAlchemy,因为它的开发和社区更加活跃。

两个ORM完全不同。 SQLObject没有事务,并且具有自己的缓存。 SQLAlchemy具有会话缓存,但是在session.commit之后过期。启用自动提交会消除任何缓存。

session.commit之后缓存过期将大大降低性能。

我研究了Dogpile缓存,但是看起来它缓存特定的查询而不是对象。我正在寻找在session.commit之后仍然存在的对象层缓存。也就是说,如果我执行order.Item,则应检查缓存中是否有order.ItemID,如果不在其中,请转到数据库并将order.Item添加到缓存中。

编辑:

我刚刚发现了expire_on_commit标志:

    Session = sqlalchemy.orm.sessionmaker(bind=engine, expire_on_commit=False)

SQLAlchemy的创建者说this

  

因此,很长时间以来,默认值为0.4,“永远,甚至不可能”。提交没有过期时间,当时我认为除非您绝对要放弃所有已加载的出色数据,否则这是疯狂的。

使用SQLObject时,我已关闭了缓存,因此我已经在手动使对象过期。因此,关闭expire_on_commit应该会使过渡更加自然。

0 个答案:

没有答案