Я пытаюсь использовать SQLAlchemy с Flask.
По умолчанию все мои отношения в модели SQLAlchemy настраиваются с помощью параметра свойства noload lazy. Это предотвращает загрузку данных, которые не являются строго обязательными.
Когда мне нужны данные из отношений, я хочу явно настроить их, используя функцию options в SQLAlchemy.
Следующее работает и включает все отношения (роль и профиль):
items = db.session.query(Member).options(db.joinedload(Member.role), db.joinedload(Member.profile)).all()
Однако, когда вышеуказанному запросу предшествует другой запрос к члену, как показано ниже, объект профиля не является возвращается для второго запроса:
member = db.session.query(Member).filter(db.and_(Member.email == "lennarddeurman@live.nl", Member.channel_id == channel_id)).first()
items = db.session.query(Member).options(db.joinedload(Member.role), db.joinedload(Member.profile)).all()
Это мой объектный класс:
class Member(DBModel, ObjectWithDefaultProps, ObjectWithNotificationProfile, ChannelLinkedObject):
__tablename__ = "member"
email = db.Column(db.String, nullable=False, primary_key=True)
is_admin = db.Column(db.Boolean, default=False, nullable=False)
blocked = db.Column(db.Boolean, default=False, nullable=False)
channel_id = db.Column(db.Integer, db.ForeignKey("channel.id"), nullable=False, primary_key=True)
channel = db.relationship("Channel", foreign_keys=channel_id, lazy="noload")
role_id = db.Column(db.Integer, db.ForeignKey("role.id"))
role = db.relationship("Role", foreign_keys=role_id, lazy="noload")
email = db.Column(db.String, db.ForeignKey("profile.email"), nullable=False, primary_key=True)
profile = db.relationship("Profile", foreign_keys=email, lazy="noload")
Я думаю, что запросы конфликтуют, но я не могу выяснить, что можно сделать для избежать этого Есть ли у кого-нибудь решение для правильной загрузки отношений в моем запросе при загрузке первого запроса без отношений?