F-expressies voor atomische updates
Kolommen veilig bijwerken met hun eigen waarden
F-expressies voor atomische updates is een gratis Django Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Django Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Django Academy bevat in totaal 4 lessen.
De valkuil van lezen-wijzigen-schrijven
Een waarde laden, die in Python wijzigen en daarna opslaan veroorzaakt een raceconditie: twee aanvragen kunnen hetzelfde getal lezen en elkaars wijzigingen overschrijven.
Maak kennis met F-expressies
Een F-expressie verwijst op naam naar een kolom, zodat de database de berekening zelf uitvoert in plaats van de waarde naar Python en terug te sturen.
from django.db.models import FOphogen in de database
Gebruik F om een kolom te verhogen op basis van de huidige waarde ervan, veilig berekend binnen één SQL-instructie.
Product.objects.filter(id=1).update(stock=F("stock") - 1)Waarom dit atomair is
De volledige wijziging wordt uitgevoerd als één UPDATE, waardoor gelijktijdige aanvragen correct bij elkaar worden opgeteld in plaats van elkaars resultaten te overschrijven.
Veel rijen tegelijk bijwerken
Omdat F in SQL wordt uitgevoerd, kun je een wijziging in één query toepassen op een volledige queryset, bijvoorbeeld door elk product een verhoging te geven.
Product.objects.update(price=F("price") * 1.1)Twee kolommen vergelijken
F-expressies zijn ook handig in filters, omdat je daarmee de ene kolom rechtstreeks in de query met een andere kunt vergelijken.
Order.objects.filter(shipped__gt=F("ordered"))Vernieuwen na update()
Een instantie in het geheugen verandert niet wanneer je update uitvoert. Roep daarom refresh_from_db aan om de nieuwe waarde op te halen.
p.refresh_from_db()F op één instantie
Je kunt ook een F-expressie aan een veld toewijzen en daarna save uitvoeren; Django zet dit om in dezelfde SQL die rekening houdt met de kolom.
p.stock = F("stock") - 1
p.save()Rekenkundige bewerkingen tussen velden
F-waarden ondersteunen volledige rekenkundige bewerkingen, zodat je kolommen kunt combineren, bijvoorbeeld om een totaal op te slaan dat uit prijs en aantal is berekend.
Line.objects.update(total=F("price") * F("qty"))Een veelgemaakte fout
Na het opslaan met een F-expressie bevat het Python-attribuut nog steeds het expressie-object, en niet het getal, totdat je de instantie vernieuwt.
Wanneer je F gebruikt
Gebruik F wanneer een update afhankelijk is van de huidige waarde van een kolom, vooral bij tellers, saldi en voorraad die door veel aanvragen wordt aangepast.
Korte controle
Twee afrekeningen verwerken hetzelfde product tegelijk. Welke aanpak voorkomt dat een voorraadverlaging verloren gaat?
Samenvatting
F-expressies verplaatsen berekeningen naar de database voor atomaire, racevrije updates van één of meerdere rijen. Vernieuw daarna wel je instantie. 💾
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “F-expressies voor atomische updates” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Django Academy, waaronder “F-expressies voor atomische updates”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Django Academy bevat in totaal 4 lessen.
Wat leer ik in “F-expressies voor atomische updates”?
Kolommen veilig bijwerken met hun eigen waarden Je oefent met Django Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Django Academy te beginnen?
Ervaring vooraf is niet nodig. Django Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “F-expressies voor atomische updates”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Django Academy?
Ja. Elke les over Django Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- aggregate versus annotate
- F-expressies voor atomische updates
- Q-objecten voor complexe filters
- Voorwaardelijke aggregatie met Case/When