2011-01-13 79 views
8

我使用SqlAlchemy连接到我的数据库后端,并在我的Python应用程序中大量使用多处理。我遇到了一种需要将对象引用(这是数据库查询的结果)从一个进程传递到另一个进程的情况。SqlAlchemy和多重处理

这是一个问题,因为在访问对象的属性时,SQLAlchemy的改掉重新附加对象到另一个过程,失败,异常的当前会话,因为对象是在其他会话附:

InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148') 

处理这种情况的方法是什么?是否有可能从第一个会话中分离对象或克隆没有ORM相关内容的对象?

+2

只是一个建议:

我建议你服用你需要的是对象的属性,干扰他们进入一个字典和 使用multprocessing管道发送它整个过程你尝试合并对象变成新的会议? http://www.sqlalchemy.org/docs/orm/session.html#merging – 2011-01-13 13:05:10

+0

session.expunge(obj)使sqlalchemy忘掉了obj。但是,如果之后更改obj,则更改不会再提交给数据库。 maksymko的建议当然更好。 – Simon 2011-01-13 13:09:49

回答