我正在尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
我担心的是我错过了什么吗?我读到“包含”也不总是有效。有更好的方法来做我正在做的事情吗?
对于ilike和like,您需要在搜索中包含通配符,如下所示:
Clients.lastName.ilike(r"%{}%".format(search))
Run Code Online (Sandbox Code Playgroud)
正如Postgres 文档所说:
LIKE 模式匹配始终覆盖整个字符串。因此,要匹配字符串中任意位置的序列,模式必须以百分号开头和结尾。
另一个区别是contains区分大小写,而不ilike区分大小写。