/ / Kann ich pymysql.connect () mit "with" -Anweisung verwenden? - python, with-statement, pymysql

Kann ich pymysql.connect () mit "with" -Anweisung verwenden? - Python, mit-Anweisung, pymysql

Folgendes ist in pymysql als Beispiel aufgeführt:

conn = pymysql.connect(...)
with conn.cursor() as cursor:
cursor.execute(...)
...
conn.close()

Kann ich stattdessen Folgendes verwenden oder bleibt eine dauerhafte Verbindung bestehen? (es wird erfolgreich ausgeführt)

import pymysql
with pymysql.connect(...) as cursor:
cursor.execute("show tables")

(Python 3, neueste Pymysql)

Antworten:

6 für die Antwort № 1

Dies sieht nicht sicher aus, wenn Sie schauen Hier, das __enter__ und __exit__ Funktionen sind das, was in a genannt wird with Klausel. Für die pymysql-Verbindung sehen sie so aus:

def __enter__(self):
"""Context manager that returns a Cursor"""
return self.cursor()

def __exit__(self, exc, value, traceback):
"""On successful exit, commit. On exception, rollback"""
if exc:
self.rollback()
else:
self.commit()

Es sieht also nicht so aus, als würde die Verbindung durch die exit-Klausel geschlossen, was bedeutet, dass sie noch andauern würde. Ich bin nicht sicher, warum sie das so gemacht haben. Sie könnten jedoch Ihre eigenen Wrapper herstellen, die dies tun.

Sie können eine Verbindung wiederherstellen, indem Sie mehrere Cursor damit erstellen (die Quelle für Cursor ist hier) Die Cursor-Methoden sehen folgendermaßen aus:

def __enter__(self):
return self

def __exit__(self, *exc_info):
del exc_info
self.close()

Also schließen sie sich. Sie können eine einzelne Verbindung erstellen und mit mehreren Cursorn in wiederverwenden with Klauseln.