python - SQLAlchemy,获取未绑定(bind)到 session 的对象

标签 python sqlalchemy

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

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/

相关文章:

Python正则表达式字符串数组到 float 组

Python + SQLAlchemy + Oracle + 序列 = 无法插入新行

python - 奇怪的 SQLAlchemy 错误消息 : TypeError: 'dict' object does not support indexing

python - SQLAlchemy/Python 3(默认列值)

python - 如何创建sqlalchemy到json

python - 如何从数组C++中获取 'n'随机值

python - 如果我使用动态类型,如何自动完成 python 代码

python - 如何在 Django 中手动分配图像字段

python - 当唯一改变的是方法时重构 Python 代码?

python - sqlalchemy 截断标签