Django выбрать максимальное поле из MySQL, когда столбец VARCHAR - PullRequest
0 голосов
/ 18 апреля 2010

Используя Django 1.1, я пытаюсь выбрать максимальное значение из столбца varchar (в MySQL.) Данные, хранящиеся в столбце, выглядят следующим образом:

9001
9002
9017
9624
10104
11823

(На самом деле цифры намного больше этого).

Это работало до тех пор, пока числа не превысили 10000:

Feedback.objects.filter(est__pk=est_id).aggregate(sid=Max('sid'))

Теперь та же самая строка вернула бы 9624 вместо 11823.

Я могу выполнить запрос непосредственно в БД, который дает мне то, что мне нужно, но я не могу найти лучший способ сделать это в Django. Запрос будет:

select max(sid+0) from Feedback;

Любая помощь будет высоко ценится.

Спасибо!

1 Ответ

1 голос
/ 18 апреля 2010

В духе «любая помощь будет высоко цениться», вы должны выяснить, почему она перестала работать внутри Django (но, по-видимому, не внутри MySQL) - на 10000.

Какой запрос генерируется? См. этот вопрос , чтобы узнать, как это выяснить.

Я подозреваю, что это потому, что вы добавляете +0, чтобы сделать сортировку числовой в вашем запросе. Я не думаю, что Django поддерживает это естественно, поэтому у вас есть два варианта:

  • Люди, несомненно, захотят узнать, почему вы храните число и запрашиваете его максимальное значение в столбце VARCHAR. Вы можете изменить столбец на числовой тип данных .
  • Вы можете делать то, что вам нужно, всякий раз, когда вы хотите выполнить какой-либо пользовательский вызов SQL, и Django пока не поддерживает : пишет свой собственный сырой SQL .
  • Редактировать: Вы также можете исправлять Django, но это может быть связано с MySQL, так что вариант №2, вероятно, является лучшим выбором.
...