获取 child table 所有包含空值的值 sqlalchemy
get child table all values containing null sqlalchemy
我的table看起来像
parent table 就像
class Site(Base):
__tablename__ = "Site"
id = Column(Integer, primary_key=True)
tunnels = relationship("Tunnel", backref="site", passive_deletes=True)
我的childtable就像
class Tunnel(Base):
__tablename__ = "Tunnel"
id = Column(Integer, primary_key=True)
tunnel_id = Column(Integer, nullable=True, index=True)
site_id = Column(
Integer, ForeignKey("Site.id", ondelete="CASCADE"), nullable=False)
我只想获取那些 Site 在 tunnel_id 中具有 Null 值的数据 child table(因为 1 个站点可以有多个隧道,所以即使 1 个隧道在 n 中为 Null)我想要那个站点。我怎样才能有效地做到这一点。
P.s 我是烧瓶的初学者。
如果我理解正确,您需要所有站点,在其引用的隧道关系下至少有一个 tunnel_id 值为 NULL 的对象。在这种情况下,我建议从站点 table 到隧道 table 的连接语句,其中使用外键查询引用的对象。要检查 tunnel_id 是否为 NULL,您只需将此查询与过滤器组合即可。
Site.query.join(Tunnel).filter(Tunnel.tunnel_id.is_(None)).all()
如果您更喜欢会话语法。
db.session.query(Site).join(Tunnel).filter(Tunnel.tunnel_id.is_(None)).all()
我的table看起来像
parent table 就像
class Site(Base):
__tablename__ = "Site"
id = Column(Integer, primary_key=True)
tunnels = relationship("Tunnel", backref="site", passive_deletes=True)
我的childtable就像
class Tunnel(Base):
__tablename__ = "Tunnel"
id = Column(Integer, primary_key=True)
tunnel_id = Column(Integer, nullable=True, index=True)
site_id = Column(
Integer, ForeignKey("Site.id", ondelete="CASCADE"), nullable=False)
我只想获取那些 Site 在 tunnel_id 中具有 Null 值的数据 child table(因为 1 个站点可以有多个隧道,所以即使 1 个隧道在 n 中为 Null)我想要那个站点。我怎样才能有效地做到这一点。
P.s 我是烧瓶的初学者。
如果我理解正确,您需要所有站点,在其引用的隧道关系下至少有一个 tunnel_id 值为 NULL 的对象。在这种情况下,我建议从站点 table 到隧道 table 的连接语句,其中使用外键查询引用的对象。要检查 tunnel_id 是否为 NULL,您只需将此查询与过滤器组合即可。
Site.query.join(Tunnel).filter(Tunnel.tunnel_id.is_(None)).all()
如果您更喜欢会话语法。
db.session.query(Site).join(Tunnel).filter(Tunnel.tunnel_id.is_(None)).all()