微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django __精确查询集过滤器-区分大小写无法按预期工作

如何解决Django __精确查询集过滤器-区分大小写无法按预期工作

我尝试过滤区分大小写的Django queryset,尽管我没有从“ __exact”过滤器中获得期望的结果,但我认为该结果是区分大小写的: https://docs.djangoproject.com/en/3.0/ref/models/querysets/

我的代码如下:

lower_case_test = MyObject.objects.filter(name__exact="d")
for item in lower_case_test:
    print("item.name: ",item.name)

在“ MyObject”模型中有2个,一个名为“ d”,另一个名为“ D”。

以上代码输出为:

(u'item:',u'D')(u'item:',u'd')

有人可以在这里提出问题吗? 预先感谢。

解决方法

我认为您在过滤器中输入了错字,因为它应该是nameexact之间的两个下划线。

某些数据库无法对字符串进行完全匹配,并且会以小写/大写形式回答您的结果。

您的数据库和数据库配置是什么?

django note中的更多信息

您可以通过在django shell(./manage.py shell)中进行查询来找出并询问sql语句:

from logging import getLogger,DEBUG,StreamHandler
l = getLogger('django.db.backends')
l.setLevel(DEBUG)
# l.addHandler(StreamHandler())  # shouldn’t be necessary
list(MyObject.objects.filter(name__exact="d"))

有了这个,您可以尝试直接在数据库中播放它,并更好地了解发生了什么(可以使用./manage.py dbshell

,

如果您使用的是SQLLite数据库,则__exact和__iexact查询不区分大小写。

要正确使用功能,请将MySql数据库的排序规则更改为latin1_swedish_cs或utf8_bin以进行区分大小写的比较。

检查链接以获取详细的解决方案。 https://code.djangoproject.com/ticket/2170

,

让我们考虑您的模型MyObject,它有一个字段name

您在这里所做的第一件事是输入错误。查找类型应以__符号(双下划线)开头

因此您的查询应类似于name__exact

,让我们考虑一下数据库中存在一个名称为'D'的元素,另一个名称为'd'的元素

因此,我们有两种查找类型:exact和iexact。

print(MyObject.objects.filter(name__iexact='D').values_list('name',flat=True))

将给出输出 D,d

print(MyObject.objects.filter(name__exact='D').values_list('name',flat=True))

将给出输出 D

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?