1

我尝试在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))

非常感谢任何想法。

4

0 回答 0