0%

Meerdere wijzigingen, één uitkomst

De verbinding is nog open

with connection: lijkt op het openen van een bestand met with, maar de twee contexten beloven verschillende dingen. Een SQLite-verbindingscontext rondt een transactie af. Hij sluit de verbinding niet.

Dit is een volledige aanroeper na het succesvolle paar uit de vorige oefening:

result = checkout_pair(
    connection,
    (7301, 4, 17, "2026-08-26"),
    (7302, 5, 28, "2026-08-26"),
)
count = connection.execute("SELECT COUNT(*) FROM loans").fetchone()[0]

De waarneming is:

checkout_pair(...) -> True
Same connection loan count: 5
Fresh connection new loan IDs: [7301, 7302]
Connection still open: yes

De nieuwe verbinding bewijst de blijvende opslag: de context heeft de twee nieuwe rijen gecommit. De telling via de oorspronkelijke verbinding bewijst de levensduur: het object dat aan checkout_pair is meegegeven, blijft bruikbaar nadat de context is geëindigd.

Deze taakverdeling houdt functies combineerbaar. checkout_pair bepaalt de uitkomst van zijn wijzigingen, maar de aanroeper wil misschien nog een query uitvoeren, een teruggave verwerken of een andere bewerking met dezelfde verbinding doen. De aanroeper die de verbinding heeft geopend, roept uiteindelijk close() aan.

Het databasebestand heeft een derde levensduur. Eén verbinding sluiten verwijdert geen database die in een bestand is opgeslagen. Een latere verbinding kan hetzelfde pad openen en gecommitte rijen lezen. In deze oefeningen bestaat de getoonde database alleen binnen één tijdelijke Run, dus er wordt niets beloofd voor na die Run of na Reset project.

Wat doet het verlaten van with connection: nadat beide inserts zijn geslaagd?

Nu de levensduur duidelijk is, kun je hetzelfde transactiepatroon gebruiken om één actieve uitlening af te ronden zonder het eigenaarschap van de verbinding over te nemen.