gpt4 book ai didi

django-orm - Django ORM : MyModel. objects.filter(name__iexact__in=[...])

转载 作者:行者123 更新时间:2023-12-04 12:56:56 29 4
gpt4 key购买 nike

我有一个字符串列表,我想使用 Django ORM 进行不区分大小写的“in”查找。

我知道,我可以这样做:

name_list = ['Alpha', 'bEtA', 'omegA']
q_list = map(lambda n: Q(name__iexact=n), name_list)
q_list = reduce(lambda a, b: a | b, q_list)
MyModel.objects.filter(q_list)

但是也许有更现代的 Django ORM 的更简单的解决方案?

最佳答案

IN 运算符(以及除二进制比较之外的其他 MySQL 运算符)默认不区分大小写,除非您更改了表排序规则。在大多数情况下,您可以简单地使用 MyModel.objects.filter(name__in=name_list) .

https://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/了解更多关于整理的信息。

附言避免像这样使用 map-reduce。如果 name_list 长度足够大,您的整个 mysql-server 可能会宕机。

编辑:

对于 PostgreSQL,您可以执行以下操作:MyModel.objects.annotate(name_lower=Lower('name')).filter(name_lower__in=[name.lower() for name in name_list])

关于django-orm - Django ORM : MyModel. objects.filter(name__iexact__in=[...]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946635/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com