我正在尝试从数据库中获取对象集合并将其传递给未连接到数据库的另一个进程。我的代码如下所示,但我不断收到:
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()
我可以使用元素,但担心 session 的状态,因为它没有关闭。
我在这里错过了什么?
最佳答案
如果您希望通过查询 session 产生的一堆对象在 session 范围之外可用,您需要 expunge他们参加 session 。
在您的第一个函数示例中,您需要添加一行:
session.expunge_all()
之前
session.close()
更一般地说,假设 session 没有像第一个示例那样立即关闭。也许这是一个在整个 Web 请求或类似情况下保持事件状态的 session 。在这种情况下,您不想执行 expunge_all
。你会想要更多的外科手术:
for item in lst:
session.expunge(item)
关于python - SQLAlchemy,获取未绑定(bind)到 session 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253978/