回答问题

我正在尝试从数据库中获取对象集合并将其传递给未连接到数据库的另一个进程。我的代码如下所示,但我不断收到:

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()

我可以使用这些元素,但担心会话的状态,因为它没有关闭。

我在这里想念什么?

Answers

如果您希望通过查询会话产生的一堆对象在会话范围之外可用,您需要为会话删除它们。

在您的第一个函数示例中,您需要添加一行:

session.expunge_all()

session.close()

更一般地说,假设会话没有像第一个示例那样立即关闭。也许这是一个在整个 Web 请求或类似情况下保持活动状态的会话。在这种情况下,你不想做expunge_all。你会想要更多的手术:

for item in lst:
    session.expunge(item)
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐