Eine Python-Schnittstelle um die Datenbank legen · Abschlussprojekt
Abschlussprojekt: Projekt: Das Katalog-Datenbankmodul vervollständigen
Ein Aufrufer kann jetzt über ein kleines Datenbankmodul mit klaren Zusagen einen vollständigen Ablauf von Ausleihe bis Rückgabe durchführen:
Available before checkout: ['IT-100', 'IT-200', 'IT-400', 'IT-500']
checkout_item(...) -> 9001
Available after checkout: ['IT-200', 'IT-400', 'IT-500']
return_loan(connection, 9001, '2026-08-27') -> True
Available after return: ['IT-100', 'IT-200', 'IT-400', 'IT-500']
Deine letzte Aufgabe ist, return_loan(connection, loan_id, returned_on) in catalog_db.py zu vervollständigen. Es identifiziert einen Ausleihvorgang über seine eigene ID, nicht über die Gegenstands-ID, und ändert nur einen aktiven Ausleihvorgang:
UPDATE loans
SET returned_on = ?
WHERE id = ? AND returned_on IS NULL;
Führe diese parametrisierte Aktualisierung innerhalb von with connection: aus. Binde (returned_on, loan_id) in Platzhalterreihenfolge. Wandle vor dem Verlassen des Blocks den Nachweis betroffener Zeilen mit result.rowcount == 1 in einen booleschen Wert um. Gib diesen Wert zurück, nachdem der Kontext festgeschrieben hat.
Der erste Aufruf für einen aktiven Ausleihvorgang gibt True zurück. Ein wiederholter Aufruf gibt False zurück und darf das erste Rückgabedatum nicht überschreiben. Ein fehlender Ausleihvorgang gibt ebenfalls False zurück. Diese Operation fängt keine Ausnahmen ab und übersetzt sie nicht. Sie schließt die übergebene Verbindung niemals.
Halte die anderen drei öffentlichen Funktionen intakt. Die Zusagen des fertigen Moduls sind:
open_database(database_path)gibt eine konfigurierte offene Verbindung zurück.list_available_items(connection)gibt einfache Dictionaries in Inventarkennzeichen-Reihenfolge zurück.checkout_item(connection, loan_id, item_id, member_id, checked_out_on)schreibt eine geprüfte Ausleihe fest oder löst eine der drei exaktenValueError-Meldungen aus.return_loan(connection, loan_id, returned_on)schreibt die Aktualisierung eines aktiven Ausleihvorgangs fest und gibt einen booleschen Wert zurück.
Beim Import soll das Modul nur diese Operationen definieren. Öffne keine feste Datenbank, erstelle keine Tabellen, erzeuge keine Ausgabe und führe beim Import keine Demonstration aus. Eine aufrufende Operation verwaltet den Lebenszyklus: Sie öffnet einmal, führt mehrere Aufrufe aus und schließt dann einmal in finally.
Klicke auf Run. Die sichtbare Aufrufabfolge prüft die Verfügbarkeit, leiht Gegenstand 1 aus, prüft die Verfügbarkeit erneut, schließt Ausleihvorgang 9001 durch Rückgabe ab, wiederholt diese Rückgabe, um False zu zeigen, und listet den wieder verfügbaren Gegenstand auf. Eine neue Verbindung bestätigt, dass 2026-08-27 gespeichert bleibt. Dann schließt der aufrufende Code seine Verbindung.
Submit wiederholt den gesamten Ablauf mit anderen Datensätzen und prüft alle vier öffentlichen Zusagen zusammen.
Aufgabe
Vervollständige return_loan(connection, loan_id, returned_on) in catalog_db.py.
Führe innerhalb eines Verbindungskontexts die exakte parametrisierte Aktualisierung für id = ? AND returned_on IS NULL aus, binde (returned_on, loan_id) und gib nach dem Commit zurück, ob result.rowcount == 1 gilt. Eine erfolgreiche erste Rückgabe ist True; ein wiederholter oder fehlender Ausleihvorgang ist False. Erhalte die anderen drei öffentlichen Funktionen, lass übergebene Verbindungen offen und führe beim Import des Moduls keine Arbeit aus.