SqlAlchemy的问题 - "父实例<SomeClass>未绑定到Session;延迟加载操作......"

Ton*_*ony 8 python sqlalchemy

我在python中有一个小的thrift服务器,我用它做一些快速查找.服务器在第一个请求时通过SqlAlchemy查询mysql,并将所有返回的对象推送到字典中,以便在后续请求中不需要DB调用.我只是从dict中获取对象,然后调用一些对象方法来提供正确的响应.

最初,一切都很好.但是,在服务器运行一段时间后,我在访问sqlalchemy对象方法时遇到此异常:

父实例未绑定到Session; 属性'rate'的延迟加载操作无法继续.

奇怪,因为我设定eagerload('rate').

我无法真正看到这种行为的模式,它只影响一些对象.但是,一旦它确实影响了一个对象,它将继续在每个请求上执行此操作,直到我重新启动我的python服务器.

有任何想法吗?

let*_*bee 9

您可能在请求之间缓存对象,并且在提交发生时,会话对象被清除,使对象无效.如果您通过某个多线程Web服务器启动服务器,该服务器根据需要启动工作程序,这就解释了为什么没有模式.如果你不想深究这个并且只需要快速修复,这将始终有效:

if obj not in session:
    obj = session.query(ObjClass).get(obj.id)
Run Code Online (Sandbox Code Playgroud)

正确的解决方案是确保不在请求之间缓存对象.