0

尝试重构 collectionsQuery 中的 keywordAlt 位

def countSubject(genres):
    for keyword in genres:  
        keywordAlt = '%'+keyword+'%'
        collectionsQuery = Collection.select().join(Subject).where(Subject.name ** keywordAlt, Subject.name != 'librivox', Subject.name != 'spoken',  Subject.name != 'audiobook', Collection.downloads > 50)
        if collectionsQuery.count() > 5:
            print keyword, collectionsQuery.count()

我正在重构此代码段,并希望首先删除关键字Alt 位并将文本包含在我的查询中。然而

        collectionsQuery = Collection.select().join(Subject).where(Subject.name ** '%'+keyword+'%', Subject.name != 'librivox', Subject.name != 'spoken',  Subject.name != 'audiobook', Collection.downloads > 50)

但是,使用第二种方法,它匹配所有内容。

        collectionsQuery = Collection.select().join(Subject).where(Subject.name ** %keyword%, Subject.name != 'librivox', Subject.name != 'spoken',  Subject.name != 'audiobook', Collection.downloads > 50)

这被解释为“关键字”的通配符搜索

什么是正确的语法?

4

1 回答 1

0

啊,我想我看到了问题......它与python的运算符优先级有关。

尝试这个:

collectionsQuery = (Collection
                    .select()
                    .join(Subject)
                    .where(
                        Subject.name ** ('%' + keyword + '%'),
                        # rest of query here ...
                    ))
于 2013-06-21T18:55:22.033 回答