Wenn eine Datei nicht mehr reicht · Übung
Dieselbe Datenbank schließen und wieder öffnen
Was passiert mit gespeicherten Daten nach connection.close()?
Eine Datenbank im Arbeitsspeicher verschwindet mit ihrer Verbindung, deshalb kann sie diese Frage nicht beantworten. Dieses Mal verwendet SQLite eine Datenbankdatei. Wir speichern einen kurzen Text, schließen die Verbindung, öffnen dieselbe Datei erneut und versuchen, den Text wieder zu lesen.
Schreiben, schließen und wieder öffnen
Der erste Teil von reopen_and_read() ist bereits fertig:
first_connection = sqlite3.connect(database_path)
run_query.initialize_marker(first_connection, marker)
first_connection.close()
database_path sagt SQLite, welche Datei es öffnen soll. Die erste Verbindung schreibt den Wert in marker und schließt dann.
Halte kurz inne, bevor du weitermachst. Wenn ein zweiter Aufruf von sqlite3.connect() denselben Pfad verwendet, erwartest du dann, dass er den Marker liest oder eine leere Datenbank findet?
Öffne persistence.py und finde die fehlende zweite Verbindung:
second_connection = None
Ersetze None durch eine neue Verbindung zu database_path. Behalte den Rest der Funktion bei, klicke dann auf Run und suche die Überschrift == persistence.py ==.
Wenn der Marker nach dem erneuten Öffnen erscheint, vergleiche, was sich geändert hat und was gleich geblieben ist. first_connection ist geschlossen. second_connection ist ein anderes Python-Objekt. Der Pfad ist unverändert, deshalb erreichen beide Verbindungen dieselbe Datenbankdatei.
Eine Verbindung zu öffnen, zu verwenden und zu schließen ist ihr Lebenszyklus. Dass die Daten die Verbindung überdauern, die sie geschrieben hat, ist dauerhafte Speicherung in einer Datei. Du hast jetzt beides beobachtet.
Die Website entfernt diese temporäre Datenbankdatei, nachdem Run beendet ist. Auf deinem eigenen Computer bleibt eine Datenbankdatei bestehen, bis du oder dein Programm sie entfernt.
Was beweist es, wenn die zweite Verbindung den Marker der ersten Verbindung liest?
Du hast eine Verbindung vollständig geschlossen und ihre Daten trotzdem über eine andere wieder gelesen. Verfolge als Nächstes die vertraute Frage „Was kann man ausleihen?“ von Python zu den gespeicherten Zeilen und zurück.
Aufgabe
Ersetze in persistence.py den Wert None durch eine neue Verbindung zu database_path.
Halte first_connection und second_connection getrennt, schließe jede nach ihrer Arbeit und gib den Wert zurück, der über die zweite Verbindung gelesen wurde.