Meerdere wijzigingen, één uitkomst · oefening
Leg een voltooide uitleen vast met commit
Begin met de uitkomst waarin beide voorgestelde uitleningen geldig zijn. Het moment van blijvende opslag hoort na beide inserts, omdat je daar alleen komt als het volledige paar is geslaagd.
Je project bevat schema.sql al. Dat maakt de drie bekende tabellen opnieuw en moet ongewijzigd blijven. Werk in transactions.py. Wanneer je op Run drukt, maakt het zichtbare bestand run_transactions.py nieuwe databases, roept het je functies met de getoonde argumenten aan en meldt het wat een andere verbinding kan lezen. Laat dat uitvoerbestand ongewijzigd.
Open transactions.py. checkout_pair(connection, first_loan, second_loan) voert dezelfde geparametriseerde INSERT al twee keer uit. Elke voorgestelde uitlening heeft precies deze vorm:
(id, item_id, member_id, checked_out_on)
Voeg één regel toe na beide aanroepen van execute() en vóór return True:
connection.commit()
commit() slaat de geslaagde wijzigingen blijvend op. Een nieuwe verbinding kan ze daarna lezen. Als je die na de eerste insert zou plaatsen, zou je de bewerking opnieuw splitsen: als de tweede insert mislukt, zou de eerste al blijvend zijn opgeslagen.
Druk op Run. Het eerste vaste geval roept dit aan:
checkout_pair(
connection,
(7001, 4, 17, "2026-08-26"),
(7002, 5, 28, "2026-08-26"),
)
De aanroep moet True teruggeven en na heropenen hoort [7001, 7002] zichtbaar te zijn.
Dezelfde Run toont ook een paar met een ontbrekend lid. Voorlopig stopt dat met een database-regelfout. De handelende verbinding kan de eerste voorgestelde rij zien, terwijl een heropende verbinding geen van beide ziet omdat het succespunt nooit is bereikt. Onthoud die onopgeloste toestand; ze laat precies zien wat het foutpad nog moet oplossen.
Submit roept checkout_pair met andere waarden aan. Het controleert de exact opgeslagen waarden via een aparte verbinding en voert daarna een onschuldige query uit via de meegegeven verbinding. Sluit de verbinding niet binnen de functie; de aanroeper beheert haar levensduur.
Opdracht
Maak checkout_pair in transactions.py af. Commit één keer, alleen nadat beide gebonden inserts zijn geslaagd, en geef daarna True terug. Laat de meegegeven verbinding open.
Het mislukte Run-geval is voorlopig nog onopgelost. Submit controleert het geslaagde, blijvend opgeslagen paar.