2014-02-03 3 views
0

В необработанном SQL можно просмотреть базу данных, чтобы найти строки со столбцом, для которых содержимое написано всеми прописными буквами; этот вопрос был дан ответ here.Django queryset, чтобы найти записи заглавными буквами?

Есть ли способ сделать то же самое с помощью Django ORM и не прибегать к .raw()?

ответ

1

Выяснил это. Похоже, лучший способ - использовать extra. Например,

MyModel.objects.extra(where=['title = UPPER(title)']) 
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') для прохождения в регулярном выражении рекомендуется использовать синтаксис.

EDIT: Вы можете добавить регулярное выражение, как:

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

О, ничего себе. Я не знал о правильности регулярного выражения, что отличная функция. Если вы отредактируете свой ответ, чтобы включить пример использования его для капиталов, я пойду дальше и выберем его как правильно. (Я знаю, как это сделать, но другие не могут.) – foobarbecue

Смежные вопросы