1
我有三個表格:file
,file_tag
和tag
。
現在我想查找所有標籤ID爲1
和3
的文件。sqlalchemy多對多的關係(標籤系統)
class File_Tag(Base):
__tablename__ = 'file_tag'
id = Column(Integer, primary_key=True)
file_id = Column('file_id', Integer, ForeignKey('file.id'))
tag_id = Column('tag_id', Integer, ForeignKey('tag.id'))
class File(Base):
__tablename__ = 'file'
id = Column(Integer, primary_key=True)
name = Column(String(255))
tags = relationship('File_Tag')
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True)
name = Column(String(255))
files = relationship('File_Tag')
這是我有:
session.query(File).join(File.tags).filter(File_Tag.tag_id.in_([1, 3]))
的問題是,它讓我看到所有文件標籤1
OR 3
,我想看到所有文件標籤1
和3
。
的SQL querys它產生看起來是這樣的:
SELECT file.id AS file_id,
file.name AS file_name,
file.sha1 AS file_sha1,
file.import_id AS file_import_id
FROM file
INNER JOIN file_tag
ON file.id = file_tag.file_id
WHERE file_tag.tag_id IN (1, 3)
GROUP BY file.id
至於結果我得到的文件2
,3
和4
,但我應該得到的只是文件2
和4
。
我不想盡可能使用subquerys,我聽說他們是緩慢的;)
這是工作,但我需要sqlalchemy代碼,請! – fnkr
另外,我從來沒有使用過sqlalchemy,我試圖爲你製作正確的。請參閱編輯。 – Guneli
我認爲每個標籤1個子查詢是可以的,但是如果我有一個標籤的list()標籤(從0到x標籤),你能告訴我自動化嗎?例如:'searled_tags = list(1,3,10,15,...)'。 – fnkr