[英]How to make a query using a database function with Django ORM?
我想使用WHERE
子句在Django ORM中查询数据库:
WHERE LOWER(col_name) = %s
要么
WHERE LOWER(col_name) = LOWER(%s)
如何使用QuerySet API做到这一点?
您可以使用extra
使用sql函数添加自定义where条件:
Author.objects.extra(where=["lower(name) = lower(%s)"], params=['Fabio'])
您想使用params而不是直接将值嵌入到查询中,以免Django通过让Django为您转义params来避免SQL注入。
如果可以避免在传递的参数上使用sql LOWER
函数(在我的示例中为“ Fabio”),则可以使用annotate
来代替:
Author.objects.annotate(name_lower=Lower('name')).filter(name_lower=your_name.lower())
请注意, your_name.lower()
使用的是python lower
函数,而不是sql之一。
我找不到一种将注释与F()
或Lower()
( from django.db.models.functions import Lower
)一起使用的方法,以将Lower
应用于您的自定义输入,而不是另一个字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.