0

As per documentation 'contains' field lookup is case-sensitive and 'icontains' is case-Insensitive, but I don't see any difference while i'm querying it.

>>> 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'

Both are resulting same.

Note: I'm using django's SQLite DB locally

Davit Tovmasyan
  • 3,238
  • 2
  • 20
  • 36
ivardu
  • 179
  • 2
  • 15

1 Answers1

1

This case is written in the docs.

contains field lookup is being converted to LIKE clause and in SQLite it is case-insensitive.

In case you want to make LIKE clause to work case-sensitively, you need to use the following 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 []>
Davit Tovmasyan
  • 3,238
  • 2
  • 20
  • 36