Можно ли получить доступ к экземпляру SQLAlchemy после закрытия сеанса?
Я просто хочу получить доступ к атрибутам экземпляра, а не изменить их значение.
Использование одного сеанса во время выполнения решило бы проблему, но является ли это хорошей практикой? (Принимая во внимание, что программа может работать несколько дней)
Пример кода:
crud.py
@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)