gpt4 book ai didi

python - 关闭 session 后使用SQLAlchemy实例

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:00 28 4
gpt4 key购买 nike

关闭会话后是否可以访问SQLAlchemy的实例?
我只想访问实例属性,而不更改其值。

在执行期间使用单个会话可以解决问题,但这是一个好习惯吗? (考虑到该程序可能会运行几天)

示例代码:

克鲁德

@contextmanager
def session_scope():
session = Session()
try:
yield session
session.commit()
except Exception:
session.rollback()
raise
finally:
session.close()


accessdb.py

class AccessDB(object):
def add_user(self, name, password, is_admin=False):
with session_scope() as s:
user = User(username=name, password=password, is_admin=is_admin)
s.add(user)

def remove_user(self, username):
with session_scope() as s:
s.query(User).filter_by(username=username).delete()

def list_users(self):
with session_scope() as s:
return s.query(User).all()


if __name__ == '__main__':
a = AccessDB()
a.add_user("user1", "123")
a.add_user("user2", "123")
a.remove_user("user1")
users = a.list_users()
print(users[0].username)


当我返回数据库中的所有用户时,出现此错误:

sqlalchemy.orm.exc.DetachedInstanceError: Instance <User at 0x31df350> is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: http://sqlalche.me/e/bhk3)

最佳答案

诸如commit()rollback()之类的方法会使所有对象失效。为了刷新对象,您必须使用session.refresh(users[0])。然后,您将能够再次访问对象属性。

关于python - 关闭 session 后使用SQLAlchemy实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56393472/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com