0%

Mehrere Änderungen, ein Ergebnis

Die Verbindung ist weiterhin offen

with connection: sieht ähnlich aus wie das Öffnen einer Datei mit with, aber die beiden Kontexte versprechen Unterschiedliches. Ein SQLite-Verbindungskontext beendet eine Transaktion. Er schließt die Verbindung nicht.

Hier ist ein vollständiger Aufrufer nach dem erfolgreichen Paar aus der vorherigen Übung:

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]

Die Beobachtung ist:

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

Die neue Verbindung belegt die dauerhafte Speicherung: Der Kontext hat die beiden neuen Zeilen festgeschrieben. Die Anzahl über die ursprüngliche Verbindung belegt den Lebenszyklus: Das an checkout_pair übergebene Objekt bleibt nach Ende des Kontexts verwendbar.

Diese Aufgabenteilung hält Funktionen kombinierbar. checkout_pair entscheidet über das Ergebnis seiner Änderungen, aber der aufrufende Code möchte möglicherweise eine weitere Abfrage ausführen, eine Ausleihe durch Rückgabe abschließen oder eine andere Operation mit derselben Verbindung durchführen. Der Code, der die Verbindung geöffnet hat, ruft schließlich close() auf.

Die Datenbankdatei hat einen dritten Lebenszyklus. Eine Verbindung zu schließen löscht keine dateibasierte Datenbank. Eine spätere Verbindung kann denselben Pfad öffnen und festgeschriebene Zeilen lesen. In diesen Übungen existiert die angezeigte Datenbank nur innerhalb eines temporären Durchlaufs mit Run. Nach dessen Ende oder nach Reset project wird daher nichts zugesagt.

Was bewirkt das Verlassen von with connection:, nachdem beide Einfügungen erfolgreich waren?

Jetzt, da der Lebenszyklus klar ist, kannst du dasselbe Transaktionsmuster verwenden, um einen aktiven Ausleihvorgang durch Rückgabe abzuschließen, ohne die Verantwortung für die Verbindung zu übernehmen.