【发布时间】:2012-01-05 10:34:56
【问题描述】:
我正在尝试从数据库中获取对象集合并将其传递给未连接到数据库的另一个进程。我的代码如下所示,但我不断收到:
sqlalchemy.exc.UnboundExecutionError: Instance <MyClass at 0x8db7fec> is not bound to a Session; attribute refresh operation cannot proceed
当我尝试查看get_list() 方法之外的列表元素时。
def get_list (obj):
sesson = Session()
lst = session.query(MyClass).all()
session.close()
return lst
但是,如果我使用这个:
def get_list_bis (obj)
session = Session()
return session.query(MyClass).all()
我可以使用元素,但担心会话的状态,因为它没有关闭。
我在这里错过了什么?
【问题讨论】:
-
我相当肯定原始代码还有更多内容,除非 SQLA 在编写后发生了变化,因为简单地关闭会话会删除剩余的对象并且不会过期属性。另一方面,提交或回滚确实会使 attrs 过期。
-
@IljaEverilä 这是近 8 年前的问题。我很确定 SQLAlchemy 在那段时间确实发生了变化⸮
-
只是为了确保我在 0.5(11 岁)上进行了测试,但无法重现。关闭不会使属性过期,即使在当时也是如此,并且正如 cmets 中对接受的答案
Session.close()所指出的那样(并且当时确实)expunge_all()隐含地。 -
但是,可能发生的情况是在关闭会话后访问了一个延迟加载的
relationship属性,这会导致上述错误。这就是为什么它会在 SQLA 问题中有所帮助,如果有问题的模型是问题的一部分。 -
@IljaEverilä 这是可能的。但是,我不确定我是否还有那个代码。就像我说的,那是几年前的事了。 ☹
标签: python sqlalchemy