Стратегии загрузки SQLAlchemy не работают должным образом при определении нескольких запросов - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь использовать 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")

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

...