在Sqlalchemy中,模型实例始终连接到会话。如果会话结束,我将无法读取该对象。但在许多情况下,我希望尽早关闭会话以返回资源,同时仍然使用模型实例。
目前,我正在读取所有值并将它们放入 dict 。但我正在寻找一种更简单,更自动的方式。
答案 0 :(得分:1)
您可以使用expire_on_commit = False配置sessionmaker
Session = sessionmaker(expire_on_commit=False)
答案 1 :(得分:1)
在Sqlalchemy中,模型实例 NOT 不断连接到会话。会话用于在对象和数据库(http://docs.sqlalchemy.org/en/rel_0_9/orm/session.html#what-does-the-session-do)
之间建立链接这意味着你可以在没有会话的情况下对你的对象采取行动。只有当你要求使用会话时,他们的状态才会反映在你的数据库上。
session = Session()
# get some objects
objects = session.query(MyObject).all()
# then close the session
session.close()
# later on (on another function or whatever) you can manipulate your objects
objects[0].attr = 'myvalue'
objects[1].attr2 = 42
# and once you are done finally commit (this can also be done wherever you want to).
session = Session()
session.add_all(objects)
session.commit()