Django 模型中的 lower()

Ari*_*ian 3 django django-models django-orm python-3.x

这是我的查询

SELECT * FROM `music` where lower(music.name) = "hello"

我怎样才能用 django 发送这个查询

我尝试了这个,但它没有在查询中添加更低的值

>>> Music.objects.filter(name__iexact="hello")
(0.144) SELECT `music`.`id`, `music`.`name`, `music`.`artist`, `music`.`image`, `music`.`duration`, `music`.`release_date`, `music`.`is_persian` FROM `music` WHERE `music`.`name` LIKE 'hello' LIMIT 21; args=('hello',)
<QuerySet []>
Run Code Online (Sandbox Code Playgroud)

小智 6

您可以使用如下Lower 数据库功能。

>>> from django.db.models.functions import Lower
>>> lower_name_music = Music.objects.annotate(lower_name=Lower('name'))
>>> lower_name_music.filter(lower_name__iexact="hello")
Run Code Online (Sandbox Code Playgroud)
  • 第一条语句是导入数据库函数。

  • 第二条语句是添加lower_name使用列上的 Lower 函数命名的计算列name。此时数据库尚未被查询。

  • 第三条语句是使用计算列进行过滤。当这条语句打印出结果时,实际上是针对数据库执行了一个查询。