0%

Wanneer een bestand niet meer genoeg is · oefening

Sluit en heropen dezelfde database

Wat gebeurt er met opgeslagen gegevens na connection.close()?

Een database in het geheugen verdwijnt samen met zijn verbinding en kan die vraag dus niet beantwoorden. Deze keer gebruikt SQLite een databasebestand. We slaan een kort stukje tekst op, sluiten de verbinding, openen hetzelfde bestand opnieuw en proberen de tekst terug te lezen.

Schrijf, sluit en heropen

Het eerste deel van reopen_and_read() is al compleet:

first_connection = sqlite3.connect(database_path)
run_query.initialize_marker(first_connection, marker)
first_connection.close()

database_path vertelt SQLite welk bestand het moet openen. De eerste verbinding schrijft de waarde uit marker weg en sluit daarna.

Denk even na voordat je verdergaat. Verwacht je dat een tweede aanroep van sqlite3.connect() met hetzelfde pad de markering kan lezen, of een lege database vindt?

Open persistence.py en zoek de ontbrekende tweede verbinding:

second_connection = None

Vervang None door een nieuwe verbinding naar database_path. Laat de rest van de functie staan, druk op Run en zoek de kop == persistence.py ==.

Als de markering na het heropenen verschijnt, vergelijk dan wat er veranderde met wat gelijk bleef. first_connection is gesloten. second_connection is een ander Python-object. Het pad is niet veranderd, dus beide verbindingen komen bij hetzelfde databasebestand uit.

Een verbinding openen, gebruiken en sluiten vormt de levenscyclus van die verbinding. Dat gegevens bewaard blijven nadat de verbinding die ze schreef is gesloten, noemen we duurzame opslag in een bestand. Je hebt beide nu zien gebeuren.

De site verwijdert dit tijdelijke databasebestand nadat Run is afgelopen. Op je eigen computer blijft een databasebestand bestaan totdat jij of je programma het verwijdert.

Wat bewijst het als de tweede verbinding de markering van de eerste verbinding leest?

Je hebt de ene verbinding volledig gesloten en de gegevens toch via een andere verbinding teruggelezen. Volg nu de bekende vraag “Wat kunnen mensen lenen?” vanuit Python naar de opgeslagen rijen en weer terug.

Opdracht

Vervang in persistence.py de waarde None door een nieuwe verbinding naar database_path.

Houd first_connection en second_connection apart, sluit elke verbinding nadat het werk ermee klaar is en geef de waarde terug die via de tweede verbinding is gelezen.