Bouw een Python-interface rond de database · eindproject
Eindproject: Project: maak de databasemodule voor de catalogus af
Eén aanroeper kan nu via een kleine databasemodule met duidelijke garanties een volledig uitleen- en teruggavetraject uitvoeren:
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']
Je laatste taak is het afmaken van return_loan(connection, loan_id, returned_on) in catalog_db.py. Deze functie herkent een uitlening aan haar eigen ID, niet aan het voorwerp-ID, en wijzigt alleen een actieve uitlening:
UPDATE loans
SET returned_on = ?
WHERE id = ? AND returned_on IS NULL;
Voer die geparametriseerde update uit binnen with connection:. Bind (returned_on, loan_id) in de volgorde van de placeholders. Zet vóór het verlaten van het blok het aantal geraakte rijen om in een boolean met result.rowcount == 1; geef die boolean terug nadat de context heeft gecommit.
De eerste aanroep voor een actieve uitlening geeft True terug. Een herhaalde aanroep geeft False terug en mag de eerste terugbrengdatum niet overschrijven. Een ontbrekende uitlening geeft ook False terug. Deze bewerking vang geen exceptions op en zet ze niet om. Ze sluit de meegegeven verbinding nooit.
Laat de andere drie publieke functies intact. De voltooide module biedt deze garanties:
open_database(database_path)geeft een geconfigureerde open verbinding terug.list_available_items(connection)geeft gewone dictionaries terug op volgorde van inventariscode.checkout_item(connection, loan_id, item_id, member_id, checked_out_on)commit één gecontroleerde uitleen of werpt een van de drie exacteValueError-meldingen op.return_loan(connection, loan_id, returned_on)commit één update van een actieve uitlening en geeft een boolean terug.
Bij importeren mag de module alleen deze bewerkingen definiëren. Open geen vaste database, maak geen tabellen aan, druk geen uitvoer af en voer geen demonstratie uit tijdens het importeren. De aanroepende bewerking beheert de levenscyclus: ze opent één keer, doet meerdere aanroepen en sluit daarna één keer in finally.
Druk op Run. De zichtbare reeks aanroepen controleert de beschikbaarheid, leent voorwerp 1 uit, controleert de beschikbaarheid opnieuw, verwerkt de teruggave van uitlening 9001, herhaalt die teruggave om False te tonen en toont het opnieuw beschikbare voorwerp. Een nieuwe verbinding bevestigt dat 2026-08-27 opgeslagen blijft. Daarna sluit de aanroeper zijn verbinding.
Submit herhaalt het volledige traject met andere records en test de garanties van alle vier de publieke functies samen.
Opdracht
Maak return_loan(connection, loan_id, returned_on) in catalog_db.py af.
Voer binnen één verbindingscontext de exacte geparametriseerde update uit voor id = ? AND returned_on IS NULL, bind (returned_on, loan_id) en geef na de commit terug of result.rowcount == 1. Een geslaagde eerste teruggave is True; een herhaalde of ontbrekende uitlening is False. Behoud de andere drie publieke functies, laat meegegeven verbindingen open en voer geen werk uit wanneer de module wordt geïmporteerd.