【问题标题】:get all parent table data but only data of child which meet condition获取所有父表数据,但仅获取满足条件的子表数据
【发布时间】:2022-01-04 08:43:53
【问题描述】:

您好,我有两张这样的桌子:

父母是这样的

class Policy(Base):
    """table containing details for Policies"""

    __tablename__ = "UmbrellaPolicy"
    id = Column(Integer, primary_key=True)
    policy_id = Column(Integer, nullable=False, index=True)
    user_defined_name = Column(String(255), nullable=True)

孩子是这样的

class Site(Base):
    __tablename__ = "Site"

    id = Column(Integer, primary_key=True)
    policy_id = Column(Integer, ForeignKey("Policy.id"))
    site_id = Column(String(32), nullable=False, index=True)
    policy = relationship("Policy", backref="sites")

现在我想获取 Policy 表的所有数据,但仅在 site_id = 100 处获取站点表的数据。我将如何在 orm 中做到这一点?我的意思是 sql 炼金术?请指导

目前正在这样做,但它会带来所有政策:我可以限制谁只获得 site_id = 100 的网站

policies = (
            session.query(Policy)
            .join(Site)
            .filter(
                Policy.user_defined_name == 'yes',
            )
            .all()
        )

这会使用 leftjoins 来完成吗?但是我如何在烧瓶中使用它?

【问题讨论】:

    标签: python python-3.x flask orm flask-sqlalchemy


    【解决方案1】:

    试试这个(它更像是一个伪代码),应该返回所需策略的 id:

    def get_policies() -> list:
          return [s.policy_id for s in site.all().filter(site_id=100)]
    

    这将返回一个政策对象列表

    【讨论】:

    • 没有任何查询解决方案吗?这似乎太贵了
    猜你喜欢
    • 2011-07-12
    • 2013-09-10
    • 2018-10-06
    • 2021-07-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多