python - 在 SQLAlchemy 查询中选择关系

标签 python mysql sqlalchemy

我有以下模型:

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()

我得到了以下异常: 找不到 (('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()

关于python - 在 SQLAlchemy 查询中选择关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48621588/

相关文章:

php - 将字符串保存到数据库

SQLAlchemy - 带索引的建表语句

python - SQLAlchemy 声明式具体自动加载表继承

python - 使用OpenCV+Python-2.7的全身检测与跟踪

python - 获取 NameError : name 'bot_token' is not defined py. 测试

php mysql select 语句;没有得到输出

mysql - SQLAlchemy:使用不同类型键的表之间的关系?

python - 系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

python - 多选美汤

php - 尝试更新时mysql出错