繁体   English   中英

如何在Django ORM中使用数据库功能进行查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM