【发布时间】:2014-05-15 07:19:45
【问题描述】:
我有三个表:file、file_tag 和 tag。
现在我想查找所有带有 ID 为 1 和 3 的标签的文件。
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 或3 的文件,我想查看带有标签1 和3 的所有文件。
它产生的 SQL 查询如下所示:
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。
如果可能的话我不想使用子查询,我听说它们很慢;)
【问题讨论】:
标签: python sql python-3.x sqlalchemy