繁体   English   中英

在SQLAlchemy查询中选择关系

[英]Select relationship in SQLAlchemy query

我有以下模型:

class business_member(base_model):
    __tablename__ = "business_member"

    id = Column(Integer, primary_key=True)
    business_id = Column(Integer, ForeignKey("business.id"), nullable=False)
    member_id = Column(Integer, ForeignKey("user.id"), nullable=False)
    business_parts_id = Column(Integer, ForeignKey("business_parts.id"), nullable=False)
    is_admin = Column(Boolean, nullable=True, default=False)
    created_date = Column(DateTime, nullable=False)
    modified_date = Column(DateTime, nullable=True)

    __table_args__ = (UniqueConstraint("business_id", "member_id", name="business_member_uc"), )
    business = relationship("business", back_populates="members")
    member = relationship("user", back_populates="as_employee")
    part = relationship("business_parts", back_populates="employees")

然后我转换了以下原始SQL:

SELECT id, member_id, is_admin FROM business_member WHERE id IN (
SELECT id FROM business WHERE business_id = (
SELECT business_id FROM business_member WHERE member_id = 5 and business_id = 1))

到SQLAlchemy查询:

session = database.get_session()

user_validation_query = session.query(business_member.business_id).filter_by(
    member_id=kwargs["user_id"], 
    business_id=request.raw_args["business_id"]
).subquery()

get_business_id_query = session.query(business_member).options(
    load_only(business_member.id)
).filter(business_member.business_id == user_validation_query).subquery()

member_list = session.query(business_member).filter(
    business_member.id.in_(get_business_id_query)
).all()

一切正常,但是我只想返回查询结果中的id,is_admin和member(relationship)列,我尝试了诸如load_only()类的不同方法,但没有一种方法能正常工作。 我该怎么做!

更新:

例如,我将查询更改为:

member_list = session.query(business_member).options(
    load_only("id", "is_admin", "member")
).filter(
    business_member.id.in_(get_business_id_query)
).all()

而且我遇到以下异常: can't locate strategy for (('deferred', False), ('instrument', True))

用这个

member_list = session.query(business_member.id, business_member.is_admin, business_member.member).filter( business_member.id.in_(get_business_id_query)).all()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM