В sqlalchemy, возможно ли принудительно загрузить все атрибуты моего экземпляра orm, чтобы можно было безопасно удалить его?
Конкретный случай c, с которым я пытаюсь разобраться, заключается в том, что я ' мы написали декоратор
def auto_session(func):
"""
Decorate a function that takes a 'session' keyword argument. If a
session is provided, this decorator does nothing; if no session is
provided, one will be created an committed.
Before closing the auto-session, ``expunge_all()`` is called. Be aware
that this means subsequent modifications to these object instances will
NOT be reflected in the database.
"""
def inner(dbi, *args, **kwargs):
if "session" in kwargs:
return func(*args, **kwargs)
else:
kwargs["session"] = Session()
ret = func(*args, **kwargs)
kwargs["session"].commit()
kwargs["session"].expunge_all()
kwargs["session"].close()
return ret
return inner
, что приводит к ошибке Instance <MyInstance at 0x7f22d2831240> is not bound to a Session; attribute refresh operation cannot proceed
. Насколько я понимаю, это вызвано ленивыми загруженными атрибутами или связями, к которым вызывающая сторона не сможет получить доступ, потому что они удалены в декораторе.
Один из способов, которым я мог бы представить решение этой проблемы, - принудительная загрузка на звонок expunge_all()
. Есть ли способ сделать это в sqlalchemy?