sql >> Database >  >> RDS >> Mysql

Django Query Natural Sort

Voor zover ik weet is hier geen generieke Django-oplossing voor. U kunt uw geheugengebruik verminderen en uw db-query's beperken door een id/question_code lookup-structuur te bouwen

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

Ervan uitgaande dat u de resultaten wilt pagina's, kunt u geordende_vraagcodes opsplitsen, een andere zoekopdracht uitvoeren om alle vragen op te halen die u nodig hebt en ze rangschikken volgens hun positie in dat segment

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

Als de opzoekstructuur nog steeds te veel geheugen gebruikt, of te lang duurt om te sorteren, dan moet je iets geavanceerder bedenken. Dit zou zeker niet goed schalen naar een enorme dataset




  1. De pop-upvensters van Google Map tonen er niets in

  2. Begin met het bekijken van zoekopdrachtresultaten voordat de zoekopdracht eindigt

  3. Waar is het MySQL 5.7 my.cnf-bestand?

  4. Gedistribueerde databasetransactie versus cross-databasetransactie