我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?

我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?,第1张

概述使用Django 1.3x. 我目前有一个非常非常非常非常活跃的Postgres数据集,其中一个重要的列索引为较低(列). 我刚刚意识到一些常见的查询非常慢,因为当我使用iexact来匹配该字段时,Django ORM正在为字段生成查询,因为blah = UPPER(列). 是否有一种简单的方法可以强制ORM使用lower()代替,或者我是否需要为这一个删除原始SQL? 谢谢! [评论的侧面问题: 使用Django 1.3x.

我目前有一个非常非常非常非常活跃的Postgres数据集,其中一个重要的列索引为较低(列).

我刚刚意识到一些常见的查询非常慢,因为当我使用IExact来匹配该字段时,Django ORM正在为字段生成查询,因为blah = UPPER(列).

是否有一种简单的方法可以强制ORM使用lower()代替,或者我是否需要为这一个删除原始sql?

谢谢!

[评论的侧面问题:是否有一个很好的理由,被忽略了,在索引上使用了upper()而不是lower()?]

解决方法 有趣的情况在这里.我以前从来没有真正停下来想过这件事.似乎使用UPPER进行IExact搜索是在 revision 8536年引入的,以回应近三年前的 ticket 3575.在此之前,Django一直在使用IliKE进行这些类型的搜索.

我查看了后端代码,我发现唯一能指出UPPER vs LOWER的任何原因似乎是Oracle在处理不区分大小写的数据时默认为大写.由于其他人是不可知的,似乎Django决定默认使用UPPER来覆盖所有基础.

我从查看源代码得到的另一个印象是你不会使用UPPER.它实际上遍布整个地方,而不仅仅是在实际查询数据库时. Python的上层字符串扩展也经常使用.

我要说的最好的办法就是简单地创建一个带有上部(列)的索引,或者代替,然后去喝一杯.

总结

以上是内存溢出为你收集整理的我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?全部内容,希望文章能够帮你解决我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存