0%

Wijzig gegevens veilig

Bekijk vooraf de rij die je wilt wijzigen

Stel dat de gebruikelijke uitleentermijn van de projector moet veranderen. Voordat er iets wordt gewijzigd, moet de uitleenbalie kunnen zien welke opgeslagen rij bij de voorgestelde inventariscode hoort en de huidige waarden kunnen controleren.

Je bestaande functie biedt die blik vooraf al. Run toont eerst de bekende controles:

find_item(connection, "TL-100")
(3, 'TL-100', 'Cordless drill', 'tools', 7)
find_item(connection, "NO-404")
None

Voor de voorgestelde wijziging aan de projector zou de aanroeper deze exacte aanroep gebruiken:

find_item(connection, "EL-300")

Die geeft dit terug:

(5, 'EL-300', 'Projector', 'electronics', 2.5)

Die tuple geeft iemand een nuttig moment om het doel te controleren: ID 5, inventariscode EL-300, de verwachte naam en categorie en de huidige termijn 2.5. Als de aanroep None teruggaf, zou er geen huidige rij zijn om te bevestigen.

Deze stap van lezen vóór het wijzigen is een voorafgaande controle. Ze helpt de persoon of het programma te bepalen of het voorgestelde doel het bedoelde is. Ze verandert de rij niet, houdt die niet vast en maakt een latere instructie op zichzelf niet veilig.

De latere instructie die iets wijzigt, heeft nog steeds een eigen precieze WHERE-voorwaarde nodig. SQLite onthoudt geen gemeenschappelijke begrenzing voor twee afzonderlijke aanroepen. Een correcte voorafgaande controle gevolgd door een wijzigingsinstructie zonder WHERE kan nog steeds elke rij raken. De voorafgaande controle bevestigt; de wijzigingsinstructie beperkt zelf welke rijen ze raakt.

Je hoeft hier geen code te bewerken. Open catalog_changes.py als je wilt volgen hoe find_item de code bindt, druk daarna op Run en vergelijk de gevonden en ontbrekende gevallen. De quiz controleert de begrenzing waarop je vertrouwt wanneer je de wijziging zelf schrijft.

Wat bewijst find_item(connection, "EL-300") vóór een latere wijziging?

Deze taken gescheiden houden is een nuttige veiligheidsgewoonte: bevestig eerst wat je wilt wijzigen en laat de wijzigingsinstructie daarna zelf datzelfde doel aanwijzen.