Mysql
 sql >> база данни >  >> RDS >> Mysql

Django Query Natural Sort

Доколкото ми е известно, няма общо решение на Django за това. Можете да намалите използването на паметта си и да ограничите своите db заявки, като изградите структура за търсене на id/question_code

from natsort import natsorted
question_code_lookup = Question.objects.values('id','question_code')
ordered_question_codes = natsorted(question_code_lookup, key=lambda i: i['question_code'])

Ако приемем, че искате да страниците резултатите, можете след това да разделите ordered_question_codes, да изпълните друга заявка, за да извлечете всички въпроси, от които се нуждаете, да ги подредите според позицията им в този фрагмент

#get the first 20 questions
ordered_question_codes = ordered_question_codes[:20]
question_ids = [q['id'] for q in ordered_question_codes]
questions = Question.objects.filter(id__in=question_ids)
#put them back into question code order
id_to_pos = dict(zip((question_ids), range(len(question_ids))))
questions = sorted(questions, key = lambda x: id_to_pos[x.id])

Ако структурата за търсене все още използва твърде много памет или отнема твърде много време за сортиране, тогава ще трябва да измислите нещо по-усъвършенствано. Това със сигурност няма да се мащабира добре до огромен набор от данни




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql:Разменете данни за различни редове

  2. Как да получите само първия ред от ResultSet

  3. Достъп до временна таблица многократно в MySql

  4. SQL база данни с променлив брой колони

  5. Външни ключове в MySQL?