【发布时间】:2015-09-03 12:57:40
【问题描述】:
我有一个搜索栏,它使用以下查询搜索用户:
db.session.query(User).filter(or_(User.name.contains(keyword), User.location.contains(keyword))).limit(16).all()
如您所见,它使用关键字(来自搜索查询形成的列表)进行搜索。如果我搜索“John Smith”,搜索将找到名称包含“John”的用户,然后找到名称包含“Smith”的同一用户,因此它将返回该用户两次。
为了解决这个问题,我尝试像这样使用distinct():
db.session.query(User).distinct().filter(or_(User.name.contains(keyword), User.location.contains(keyword))).limit(16).all()
但它不起作用所以我尝试使用distinct(User.id):
db.session.query(User).distinct(User.id).filter(or_(User.name.contains(keyword), User.location.contains(keyword))).limit(16).all()
虽然这也不起作用。 那么问题是什么?
编辑:
有一点我忘了说代码是这样的:
query = 'John Smith'
for keyword in query.split():
db.session.query(User).distinct().filter(or_(User.name.contains(keyword), User.location.contains(keyword))).limit(16).all()
这就是为什么它返回同一用户的 2 个。我使用 for 循环是因为数据库中还有其他字段,所以如果我搜索 John Smith Mexico,它将按每个单词进行搜索。
【问题讨论】:
标签: python database sqlalchemy flask-sqlalchemy