[英]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.