Как сделать сортировку аналогичной как в MySQL

database
mysql
python
Теги: #<Tag:0x00007fedc01684a0> #<Tag:0x00007fedc01682c0> #<Tag:0x00007fedc0168108>

(Vitalii) #1

Я проверяю сортировку таблицы на веб части. Логика реализации: забрать столбец данных, отсортировать его и сравнить, что забранный и отсортированный листы одинаковые.

MySQL возвращает данные отсортированные asc:

‘mapfiltering’, ‘map_appearance_kmz’

Используя алгоритм natural сортировки в python 2.7 получаю:

‘map_appearance_kmz’, ‘mapfiltering’

Сам алгоритм:

import re
def sorted_nicely( l ):
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    return sorted(l, key = alphanum_key)

Как сделать сортировку такой же, как в MySQL?


(rmerkushin) #3

Результат запроса к БД выдает такую же сортировку как и на веб? Если да, зачем еще что то сортировать? Получили данные из веба, получили данные из бд и сравнивайте.


(Vitalii) #4

Такой подход не удобен тем, что не всегда на вебе отображаются данные в таком же самом виде как возвращает БД. Например БД и веб имеют различные форматы дат, а также не все запросы являются простыми для выборки, поэтому написание запросов под каждый столбец на множестве других страниц сильно увеличит время разработки.
Поэтому был выбран такой подход.


(rmerkushin) #5

Ну формат даты конвертнуть в запросе не проблема, за то у вас будет актуальная информация и в случае добавления данных в бд не придется менять тестовые данные :slight_smile:
P.S. а проверять ессесно нужно целиком таблицу, а не по строчно
P.P.S: в любом случае даже если вы напишете свой фильтр, не факт что он будет работать так же как сортировка в MySQL, ну либо вам нужно смотреть в сторону сорцов самого MySQL :smile:


(kixiro) #6

В MySQL есть много вариантов сортировки, проще пойти другим путем.