Я пишу простой сериализатор для экземпляров SQLAlchemy в словари Python и пытаюсь сериализовать только те объекты, которые были загружены с нетерпением, но исключая объекты, которые не были.Более конкретно, я пытаюсь проверить параметры загрузки отношения объекта SQLAlchemy, полученного из запроса с пользовательскими параметрами загрузки.Например,
class Item(db.Model):
...
field = db.relationship('Field', lazy='raise')
item = session.query(Item).options([joinedload(Item.field)]).first()
Теперь я ожидаю, что отношение Item.field будет иметь lazy = 'join', потому что я переопределяю параметры загрузки во время запроса, но когда я проверяю item._sa_instance_state.mapper.relationships.get('field').lazy
, это все еще'raise'
.
Другими словами, кажется, что параметры загрузки запроса SQLAlchemy преобразуются в SQL, но это никак не влияет на параметры загрузки состояния экземпляра.
- Я рассмотрелиспользование
item._sa_instance_state.unloaded
в качестве индикатора того, было ли что-то присоединено или нет.Если он был загружен, поле не будет в item._sa_instance_state.unloaded
.Это правильно? - Если бы что-то было
noload
, raiseload
или select
, разве они никогда не были бы в item._sa_instance_state.unloaded
до доступа?
Может кто-топожалуйста, сообщите мне, если есть лучший способ определить параметры загрузки экземпляра после запроса, пожалуйста?