准备查询一个Doc表的Tag外键。 需要完全匹配。 但是下面代码只能实现任意匹配。
query = DataBaseEngineAsset.db_session.query(AssetDocumnet).join(AssetDocumnet.tags)
query = query.filter(Tag.id.in_((3, 7)))
现在Doc如果外键中有3 或者 7, 就会被搜出来,如果DOC必须要同时有3和7是怎么查询呢?
query = query.filter(Tag.id == 3, Tag.id == 7)
这样写什么都查不出来。但感觉是这个意思。
class Tag(DataBaseEngineAsset.Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True)
name = Column(String(50))
doc = relationship("AssetDocumnet", secondary=tag_link)
class AssetDocumnet(DataBaseEngineAsset.Base):
__tablename__ = "document"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50))
tags = relationship("Tag", secondary=tag_link)
tag_link = Table(
"tag_link",
DataBaseEngineAsset.Base.metadata,
Column("doc_id", Integer, ForeignKey("document.id"), nullable=False, primary_key=True),
Column("tag_id", Integer, ForeignKey("tag.id"), nullable=False, primary_key=True)
)
查了半天官网文档还是研究出来了。 用contains 就可以。 任意和全部匹配 只需修改下 or_ 和 and_就行