Gegevensopvraging met Django ORM is een van de krachtigste functies van Django. QuerySet is het basisinstrument om gegevens efficiënt van het Django-model op te halen, en met dit hulpmiddel kunnen zelfs complexe gegevensopvragingen eenvoudig worden afgehandeld. In dit artikel bekijken we wat een QuerySet is, hoe je deze kunt gebruiken, en de verschillende functies die nuttig zijn voor gegevensopvraging.
1. Wat is een QuerySet?
QuerySet is een verzameling van objecten die worden gebruikt om gegevens van de database op te halen of te manipuleren in Django ORM. Kortom, een QuerySet is een verzameling van de resultaten van een databasequery. Met een QuerySet kun je modelobjecten ophalen, filteren en manipuleren.
QuerySets kapselen de interactie met de database in, zodat ontwikkelaars gegevens kunnen opvragen of manipuleren met intuïtieve Python-code zonder dat ze SQL rechtstreeks hoeven te schrijven.

Wat je met een QuerySet kunt doen
- Gegevensopvraging: Opvragen van records die in de database zijn opgeslagen onder verschillende voorwaarden.
- Filteren: Meerdere voorwaarden toepassen om alleen de gewenste gegevens te selecteren.
- Schoonmaken en snijden: Gegevens in de gewenste volgorde sorteren of gegevens binnen een bepaalde range ophalen.
2. Soorten basisopvraagmethoden en voorbeelden van gebruik
Django ORM biedt verschillende basisopvraagmethoden. Deze methoden zijn zeer nuttig voor het eenvoudig opvragen en filteren van gegevens.
2.1 all()
Een methode die wordt gebruikt wanneer je alle gegevens van een model wilt ophalen.
from myapp.models import Post
posts = Post.objects.all()
Post.objects.all()
haalt alle objecten die zijn opgeslagen in het Post-model op.
2.2 filter()
Gebruik deze methode om alleen objecten met specifieke voorwaarden op te halen.
published_posts = Post.objects.filter(status='published')
filter()
haalt objecten op die aan de voorwaarden voldoen en de teruggegeven resultaten zijn een QuerySet.
2.3 exclude()
Gebruik deze methode om objecten op te halen die niet aan specifieke voorwaarden voldoen.
draft_posts = Post.objects.exclude(status='published')
exclude()
haalt objecten op die niet voldoen aan de voorwaarden, tegenovergesteld aanfilter()
.
2.4 get()
Gebruik deze methode om een enkel object op te halen dat aan specifieke voorwaarden voldoet. Let op, als er geen of meer dan één overeenkomstig object is, wordt er een foutmelding gegeven.
post = Post.objects.get(id=1)
get()
wordt gebruikt om precies één object op te halen, en als er geen of meerdere objecten zijn, ontstaat er eenDoesNotExist
ofMultipleObjectsReturned
fout.
3. Operators en filtering in ORM
QuerySets stellen ontwikkelaars in staat om verschillende operators te gebruiken om complexe filtervoorwaarden te verwerken. Door deze operators te gebruiken, kunnen gegevens met zeer gedetailleerde voorwaarden worden gefilterd.
3.1 exact
Gebruik deze operator wanneer je exact overeenkomende waarden wilt vinden.
post = Post.objects.filter(title__exact='Mijn Eerste Post')
title__exact
filtert objecten waarvan de titel exact'Mijn Eerste Post'
is.
3.2 icontains
Gebruik deze operator om te controleren of een gedeeltelijke substring aanwezig is, ongeacht de hoofdletters.
posts = Post.objects.filter(title__icontains='django')
title__icontains
haalt alle berichten op waarvan de titel'django'
bevat.
3.3 gt
, lt
(groter dan, kleiner dan)
Gebruik deze operatoren om voorwaarden te stellen voor grotere of kleinere numerieke of datumwaarden.
recent_posts = Post.objects.filter(publish_date__gt='2024-01-01')
publish_date__gt
filtert berichten die zijn gepubliceerd na2024-01-01
.gt
betekent greater than, enlt
betekent less than.
Bovendien kunnen andere diverse operators zoals startswith
, endswith
, en in
worden gebruikt om uitgebreide filtervoorwaarden eenvoudig te implementeren.
4. Back-referentie: Relaties tussen modellen via buitenlandse sleutels opvragen
In Django ORM verwijst back-referentie naar het opvragen van gegevens via de relatie die is gemaakt met een buitenlandse sleutel (Foreign Key). Door back-referenties te gebruiken, is het eenvoudig om de relatie tussen ouder- en kindmodellen in een relationele database op te vragen.
4.1 Back-referentie met related_name
Wanneer je een buitenlandse sleutel definieert, kun je de optie related_name
gebruiken om leesbaarere namen voor back-referenties te krijgen.
Voorbeeld
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
text = models.TextField()
Hoe te gebruiken
post = Post.objects.get(id=1)
comments = post.comments.all()
- Met
post.comments.all()
kun je alle opmerkingen ophalen die aan die post zijn gekoppeld. Als er geenrelated_name
is ingesteld, wordt standaardcomment_set
gebruikt.
Conclusie
QuerySet van Django ORM is een krachtig hulpmiddel voor interactie met databases, dat het mogelijk maakt om doelgerichte gegevens efficiënt op te vragen en te manipuleren via verschillende methoden en operators. In dit artikel hebben we gekeken naar de basisprincipes van het gebruik van QuerySet, evenals naar het filteren van gegevens en het werken met back-referenties.
De delen die hierboven zijn gepresenteerd zijn slechts de basisintroductie tot de opvraagfunctionaliteit van ORM. In werkelijkheid heeft Django's QuerySet veel meer diverse en krachtige methoden, en kun je deze methoden combineren om gegevens op te vragen. In de toekomst zal ik posts schrijven waarin ik de verschillende methoden van QuerySet een voor een introduceer en analyseer.
In de volgende editie gaan we in op prestatieoptimalisatie van de QuerySet en het concept van luid evalueren (lazy evaluation), en leren we hoe we onze datatoegang kunnen verbeteren. Blijf op de hoogte!
댓글이 없습니다.