Как загрузить все атрибуты экземпляра sqlalchemy orm, чтобы их можно было безопасно удалить - PullRequest
0 голосов
/ 13 марта 2020

В 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...