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

Chr*_*son 5 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)
Run Code Online (Sandbox Code Playgroud)

我担心的是我错过了什么吗?我读到“包含”也不总是有效。有更好的方法来做我正在做的事情吗?

z0r*_*z0r 7

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

Clients.lastName.ilike(r"%{}%".format(search))
Run Code Online (Sandbox Code Playgroud)

正如Postgres 文档所说:

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

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