我在python中有一个小的thrift服务器,我用它做一些快速查找.服务器在第一个请求时通过SqlAlchemy查询mysql,并将所有返回的对象推送到字典中,以便在后续请求中不需要DB调用.我只是从dict中获取对象,然后调用一些对象方法来提供正确的响应.
最初,一切都很好.但是,在服务器运行一段时间后,我在访问sqlalchemy对象方法时遇到此异常:
父实例未绑定到Session; 属性'rate'的延迟加载操作无法继续.
奇怪,因为我设定eagerload('rate').
我无法真正看到这种行为的模式,它只影响一些对象.但是,一旦它确实影响了一个对象,它将继续在每个请求上执行此操作,直到我重新启动我的python服务器.
有任何想法吗?
您可能在请求之间缓存对象,并且在提交发生时,会话对象被清除,使对象无效.如果您通过某个多线程Web服务器启动服务器,该服务器根据需要启动工作程序,这就解释了为什么没有模式.如果你不想深究这个并且只需要快速修复,这将始终有效:
if obj not in session:
obj = session.query(ObjClass).get(obj.id)
Run Code Online (Sandbox Code Playgroud)
正确的解决方案是确保不在请求之间缓存对象.
| 归档时间: |
|
| 查看次数: |
6848 次 |
| 最近记录: |