我尝试在3c7的酷项目上添加一些贡献,并且我想在连接查询(sqlalchemy)上应用过滤器。
简单的语句:多个规则(表)可以有多个标签(表) - 我想根据一些标签过滤掉一些规则。
[Rules][2] table (rule_id, etc)
[Tags][2] Table (tag_id, etc)
tags_rules(Junction table) (rule_id,tag_id) -- no declaration
问题:在加入后应用过滤器当然只会删除只有一个标签(我指定的标签)的规则。如果一条规则有多个标签,则连接结果中的一条记录将被删除,但该规则仍会出现在与该规则关联的任何其他标签中
Sql 炼金术声明:
class Rule(Base):
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
name = Column(String(255), index=True)
meta = relationship("Meta", back_populates="rule", cascade="all, delete, delete-orphan")
strings = relationship("String", back_populates="rule", cascade="all, delete, delete-orphan")
condition = Column(Text)
imports = Column(Integer)
tags = relationship("Tag", back_populates="rules", secondary=tags_rules)
ruleset_id = Column(Integer, ForeignKey("ruleset.id"))
ruleset = relationship("Ruleset", back_populates="rules")
class Tag(Base):
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
name = Column(String(255), index=True)
rules = relationship("Rule", back_populates="tags", secondary=tags_rules)
我尝试了子查询,但最可行的方法似乎是在加入之前对标签表应用过滤器。
当前实施:
rules = rules.select_from(Tag).join(Rule.tags).filter(~Tag.name.in_(tags))
非常感谢任何想法。