Django 模型字段 lookup_type 'contains' 区分大小写还是不区分大小写......?

Is django model field lookup_type 'contains' case-sensitive or insensitive..?

根据文档 'contains' 字段查找区分大小写,而 'icontains' 不区分大小写,但我在查询时没有发现任何区别。

>>> from users.models import SnetUser
>>> SnetUser.objects.get(email__contains='Satti')
<SnetUser: satti>
>>> SnetUser.objects.get(email__contains='satti')
<SnetUser: satti>
>>> obj = SnetUser.objects.get(email__contains='satti')
>>> obj.email
'satti@gmail.com'

两者的结果相同。

注意:我在本地使用 django 的 SQLite 数据库

这个案例写在docs.

contains 字段查找正在转换为 LIKE 子句,在 SQLite 中它是 不区分大小写的

如果您想让 LIKE 子句区分大小写,您需要使用以下 PRAGMA:

PRAGMA case_sensitive_like = true;

>>> from django.db import connection

>>> with connection.cursor() as cursor:
...     cursor.execute('PRAGMA case_sensitive_like = true;')

>>> SnetUser.objects.get(email__contains='Satti')
<QuerySet []>