0

我正在尝试进行搜索,通过生成器将几个不同的音节传递给“and_”函数。然后,我的搜索应返回所有且仅返回所有已给出音节的单词

匹配 = db.session.query(Word).join(Word.syllables).filter(db.and_(Syllable.syllable==(syl for syl in combo)))).all()

这目前不返回任何内容。这种方法甚至有意义吗?

4

1 回答 1

0

我不认为这个查询会做你想要的。对于 combo = (1, 2),您生成的查询将是这样的:

SELECT words.* FROM words INNER JOIN syllables ON words.id = syllables.word_id WHERE syllables.syllable = 1 AND syllables.syllable = 2

我认为你想要的是组合 = (1, 2):

SELECT words.* FROM words INNER JOIN syllables AS s1 ON words.id = s1.word_id AND s1.syllable = 1 INNER JOIN syllables AS s2 ON words.id = s2.word_id AND s2.syllable = 2

重复加入可能会变慢,但这是在 sqlalchemy 中执行此操作的方法:

query = db.session.query(Word)
for syl in combo:
    syl_cls = aliased(Syllable)
    query = query.join(syl_cls, Word.syllables).filter(syl_cls.syllable == syl)
matches = query.all()

如果您正在生成 OR 子句,那么这个查询会简单得多。

于 2013-07-16T18:52:50.493 回答