sql >> Database teknologi >  >> RDS >> Mysql

Django Query Natural Sort

Så vidt jeg ved, findes der ikke en generisk Django-løsning på dette. Du kan reducere dit hukommelsesforbrug og begrænse dine db-forespørgsler ved at bygge en id/question_code-opslagsstruktur

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'])

Hvis du antager, at du vil side resultaterne, kan du derefter opdele ordered_question_codes, udføre en anden forespørgsel for at hente alle de spørgsmål, du har brug for, sortere dem efter deres placering i det udsnit

#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])

Hvis opslagsstrukturen stadig bruger for meget hukommelse eller tager for lang tid at sortere, så bliver du nødt til at finde på noget mere avanceret. Dette ville bestemt ikke skaleres godt til et stort datasæt




  1. Formatering af et numerisk SQL-forespørgselsresultat med et vilkårligt antal decimaler

  2. ved hjælp af pl/sql hvordan åbner jeg en mappe?

  3. ORA-12015:kan ikke oprette en hurtig opdateringsmaterialiseret visning fra en kompleks forespørgsel

  4. TO_DATE funktion tidszone parse fejl