как использовать подстановочный знак SQL% с Queryset extra> select? - PullRequest
0 голосов
/ 22 апреля 2010

Я использую модификатор extra () в представлении.

(См. http://docs.djangoproject.com/en/1.1/ref/models/querysets/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none)

Вот код:

def viewname(request)
    ...
    exact_matchstrings=[]
    exact_matchstrings.append("(accountprofile.first_name LIKE '" + term + "')")
    exact_matchstrings.append("(accountprofile.first_name LIKE '" + term + '\%' +  "')")

    extraquerystring = " + ".join(exact_matchstrings)

    return_queryset = return_queryset.extra(
        select = { 'match_weight': extraquerystring },
        )

Два приведенных выше оператора добавления почти полностью похожи, за исключением того, что второй добавляет % подстановочный знак SQL.Это вызывает ошибку;утверждение без % не вызывает проблем.Что происходит с %?Я удивлен, что django считает, что этот символ не определен, поскольку он указан в спецификации SQL.Например, следующий оператор SQL выполняется просто отлично:

select (first_name like "Car") + (first_name like "Car%") from accountprofile;

Но попытка запустить его с помощью модификатора extra () в моем коде представления и оценки результирующего набора запросов приводит к ошибке.Я думаю, что "%" нужно экранировать, поэтому я уже попробовал это.Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 октября 2013

Просто столкнулся с этой проблемой, выполняя дополнительный запрос с LIKE. Чтобы избежать %, вам нужно сделать %%

Знак процента не работает

0 голосов
/ 30 ноября 2010

Похоже, вам не хватает некоторых цитат из 2-й строки. И я не уверен, что вам нужно избегать процентов (%), если это не требуется для django.

_matchstrings.append("(accountprofile.first_name LIKE '" + term + "%" +  "')")
...