我有一个创建where
和words
变量的函数,然后用Peewee执行原始查询。
我希望这可行:
Project.raw('select count(id) as np from project where' + where, *words).get().np
但是当我尝试它时,我得到了这个错误:
AttributeError: 'RawQuery' object has no attribute 'get'
相反,我需要遍历那一个元素,创建一个列表并获取它的第一个项目以使其工作:
list(Project.raw('select count(id) as np from project where' + where, *words))[0].np
get()
RawQuery()
的原因?
是否有更简洁的方法来获取原始查询的结果?
修改
这是一个穷人文字搜索:我正在查找字段name
和number
中按字母顺序输入的所有字词。
当用户在文本输入字段上键入时,会生成Ajax调用。调用发送text
被输入,服务器返回第一个MAX_RESULTS
项和可用项的总数。
以下是使用hack的代码:
words = ['%%%s%%' % i for i in text]
where = ' and '.join(['(name like ? or number like ?)'] * len(words))
words = [w for l in zip(words, words) for w in l]
n_results = list(DbProject.raw('select count(number) as count from dbproject where' + where, *words))[0].count
projects = DbProject.raw('select * from dbproject where' + where + ' order by number desc limit ' + str(MAX_RESULTS), *words)
我知道有更好的方法可以text search with SQLite,但是这个项目中的文本搜索具有如此小的重要性,我决定尽可能少花时间。尽管如此,我还是不喜欢它,我决定问。