SQLAlchemy - экземпляр полной загрузки перед отсоединением - PullRequest
5 голосов
/ 12 марта 2010

Есть ли способ, как полностью загрузить некоторый сопоставленный экземпляр SQLAlchemy ORM (вместе со связанными объектами) перед его отключением от сеанса? Я хочу отправить его по конвейеру в другие процессы и не хочу объединять его в сеанс в этом новом процессе.

Спасибо
Jan

1 Ответ

2 голосов
/ 12 марта 2010

Полагаю, вы захотите использовать метод options() в запросе с eagerload() или eagerload_all().

Вот пример использования из одного из наших приложений, где класс Controlled имеет отношение, называемое changes, которое вводит кучу DocumentChange записей, которые сами имеют отношение dco, которое приводит к Dco объект на экземпляр. Это двухуровневая активная нагрузка, поэтому используется eagerload_all(). Мы используем расширение declarative (в случае, если это имеет значение), а m.Session является сеансом «scoped» (локальный для потока).

from sqlalchemy.orm import eagerload, eagerload_all
...
controlled_docs = (m.Session.query(m.Controlled)
    .options(eagerload_all('changes.dco'))
    .order_by('number')
    .all())

Если этого недостаточно, возможно, включите фрагмент или текст, показывающий, как соотносятся соответствующие классы ORM, и я мог бы обновить ответ, чтобы показать, как эти опции будут использоваться в вашем случае.

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