Flask SQLAlchemy包含/我喜欢产生不同的结果?

时间:2016-11-03 22:05:11

标签: python sqlalchemy

我正在尝试使用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)

我担心的是我错过了什么?我已经读过'包含'并不总是有用。有没有更好的方法来做我正在做的事情?

1 个答案:

答案 0 :(得分:1)

对于ilikelike,您需要在搜索中包含通配符,如下所示:

Clients.lastName.ilike(r"%{}%".format(search))

正如Postgres docs所说:

  

LIKE模式匹配始终覆盖整个字符串。因此,要匹配字符串中任何位置的序列,模式必须以百分号开头和结尾。

另一个区别是contains区分大小写,而ilike不敏感。