Python 在缓存中存储sqlalchemy映射对象

Python 在缓存中存储sqlalchemy映射对象,python,mysql,session,caching,sqlalchemy,Python,Mysql,Session,Caching,Sqlalchemy,我有一些使用非常旧的python(2.5)和相应库(例如sqlalchemy 0.5.2)的环境。 在我的项目中有一些炼金术模型。我经常选择它们,很少更新。所以我有两个引擎,一个是主引擎,另一个是从引擎。我的模型有save(self,session)方法,我用它来存储数据库中的更改 其他代码通过主键从db中选择对象,在每个pk中检查是否在缓存中有映射对象,如果没有,则通过s.query方法从db中选择行,pickle映射对象并放入缓存(在我的例子中是memcache,但这并不重要)。如果它已经在

我有一些使用非常旧的python(2.5)和相应库(例如sqlalchemy 0.5.2)的环境。 在我的项目中有一些炼金术模型。我经常选择它们,很少更新。所以我有两个引擎,一个是主引擎,另一个是从引擎。我的模型有save(self,session)方法,我用它来存储数据库中的更改

其他代码通过主键从db中选择对象,在每个pk中检查是否在缓存中有映射对象,如果没有,则通过s.query方法从db中选择行,pickle映射对象并放入缓存(在我的例子中是memcache,但这并不重要)。如果它已经在缓存中,只需将其从缓存中取消勾选,执行session.merge并返回。 在每次self.save调用之后,我都会使当前实例的缓存无效,并进行一次选择,以预缓存它,所以缓存中始终有实际对象

若我并没有执行session.merge调用,那个么若我在另一个进程(或重启后在此进程)中从缓存中获取对象,则每个属性都会出现异常:

但是使用session.merge会导致一个更新查询,这会完全否定使用memcache-只是我不更新选择。当我使用绑定到只读引擎的会话时,它失败了


我应该如何在序列化状态下正确地存储SqlAlchemy orm映射对象,而不引用存储(memcache、基于文件的、在ram中等),也不需要对db进行额外的更新查询?

通过禁用每个会话的自动刷新和自动提交,问题已经得到解决。因此,只读会话从不发送任何修改查询,而读写会话只发送显式更改的行

/var/lib/python-support/python2.5/sqlalchemy/orm/attributes.py in __get__(self, instance, owner)
157         if instance is None:
158             return self
--> 159         return self.impl.get(instance_state(instance))
160
161 class _ProxyImpl(object):