sql >> Databasteknik >  >> RDS >> Mysql

Django Query Natural Sort

Så vitt jag är medveten om finns det ingen generisk Django-lösning på detta. Du kan minska din minnesanvändning och begränsa dina db-frågor genom att bygga en id/question_code-uppslagsstruktur

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

Förutsatt att du vill bläddra resultaten kan du sedan dela upp ordered_question_codes, utföra en annan fråga för att hämta alla frågor du behöver sortera dem efter deras position i den delen

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

Om uppslagsstrukturen fortfarande använder för mycket minne, eller tar för lång tid att sortera, måste du komma på något mer avancerat. Detta skulle verkligen inte skalas bra till en enorm datauppsättning




  1. Hur visar man tabellinnehåll i Mysql Workbench GUI?

  2. ORACLE Sök i alla tabeller i en sträng med BLOB-kolumn

  3. Skriva ut resultat av en SELECT-fråga som förformaterad text i PHP?

  4. PDO-anslutning utan databasnamn?