我正在尝试使用contains / ilike查询数据库中的列,它们会产生不同的结果。知道为什么吗?
我目前的代码;
search = 'nel'
find = Clients.query.filter(Clients.lastName.ilike(search)).all()
# THE ABOVE LINE PRODUCES 0 RESULTS
find = Clients.query.filter(Clients.lastName.contains(search)).all()
# THE ABOVE LINE PRODUCES THE DESIRED RESULTS
for row in find:
print(row.lastName)
我担心的是我错过了什么?我已经读过'包含'并不总是有用。有没有更好的方法来做我正在做的事情?
答案 0 :(得分:1)
对于ilike
和like
,您需要在搜索中包含通配符,如下所示:
Clients.lastName.ilike(r"%{}%".format(search))
正如Postgres docs所说:
LIKE模式匹配始终覆盖整个字符串。因此,要匹配字符串中任何位置的序列,模式必须以百分号开头和结尾。
另一个区别是contains
区分大小写,而ilike
不敏感。