Ein weiteres Beispiel für eine sofort einsatzbereite Unterstützung, die auf den ersten Blick etwas verwirrend sein kann, wenn man an die Art und Weise gewöhnt ist, wie integrierte open()
verhält, sind connection
Objekte beliebter Datenbankmodule wie z. B.:
Le site connection
Objekte sind Kontextmanager und können als solche sofort in einer Datenbank verwendet werden. with-statement
Beachten Sie jedoch bei der Verwendung der obigen Angaben, dass:
Wenn die with-block
beendet ist, entweder mit einer Ausnahme oder ohne, die Verbindung ist nicht geschlossen . Für den Fall, dass die with-block
mit einer Ausnahme beendet wird, wird die Transaktion zurückgesetzt, andernfalls wird die Transaktion festgeschrieben.
Dies bedeutet, dass der Programmierer darauf achten muss, die Verbindung selbst zu schließen, erlaubt aber, eine Verbindung zu erwerben und sie in mehreren with-statements
wie in der folgenden Tabelle dargestellt psycopg2-Dokumente :
conn = psycopg2.connect(DSN)
with conn:
with conn.cursor() as curs:
curs.execute(SQL1)
with conn:
with conn.cursor() as curs:
curs.execute(SQL2)
conn.close()
Im obigen Beispiel werden Sie feststellen, dass die cursor
Objekte von psycopg2
sind ebenfalls Kontextmanager. Aus der einschlägigen Dokumentation über das Verhalten:
Wenn ein cursor
verlässt die with-block
wird er geschlossen und alle eventuell mit ihm verbundenen Ressourcen werden freigegeben. Der Zustand der Transaktion bleibt davon unberührt.