【问题标题】:Django queryset to find entries in all capital letters?Django查询集查找所有大写字母的条目?
【发布时间】:2014-02-03 05:28:26
【问题描述】:

在原始 SQL 中,可以在数据库中查找包含所有内容以大写字母书写的列的行;该问题已回答here

有没有办法使用 Django ORM 来完成同样的事情而不求助于 .raw() ?

【问题讨论】:

    标签: sql django capitalization


    【解决方案1】:

    您可以在 Django ORM 中使用正则表达式匹配。文档链接 - https://docs.djangoproject.com/en/dev/ref/models/querysets/#iregex

    例子:

    Entry.objects.get(title__regex=r'^(An?|The) +')
    

    SQL 等价物:

    SELECT ... WHERE title REGEXP BINARY '^(An?|The) +'; -- MySQL
    
    SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'c'); -- Oracle
    
    SELECT ... WHERE title ~ '^(An?|The) +'; -- PostgreSQL
    
    SELECT ... WHERE title REGEXP '^(An?|The) +'; -- SQLite
    

    建议使用原始字符串(例如,r'foo' 而不是 'foo')来传递正则表达式语法。

    编辑: 您可以添加如下正则表达式:

    Entry.objects.get(title__regex=r'^[[:upper:]]+$') #not tested
    

    【讨论】:

    • 哦,哇。我不知道正则表达式匹配,多么棒的功能。如果您编辑答案以包括将其用于大写字母的示例,我将继续选择它为正确的。 (我确实知道该怎么做,但其他人可能不知道。)
    【解决方案2】:

    想通了。看起来最好的方法是使用extra。例如,

    MyModel.objects.extra(where=['title = UPPER(title)'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2013-08-16
      相关资源
      最近更新 更多