【发布时间】:2014-02-03 05:28:26
【问题描述】:
在原始 SQL 中,可以在数据库中查找包含所有内容以大写字母书写的列的行;该问题已回答here。
有没有办法使用 Django ORM 来完成同样的事情而不求助于 .raw() ?
【问题讨论】:
标签: sql django capitalization
在原始 SQL 中,可以在数据库中查找包含所有内容以大写字母书写的列的行;该问题已回答here。
有没有办法使用 Django ORM 来完成同样的事情而不求助于 .raw() ?
【问题讨论】:
标签: sql django capitalization
您可以在 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
【讨论】:
想通了。看起来最好的方法是使用extra。例如,
MyModel.objects.extra(where=['title = UPPER(title)'])
【讨论】: