2012-11-12 7 views
5

Welches ist das beste Muster, um eine Abfrage mit psycopg2 zu erstellen?Psycopg2: Erstellen einer Abfrage in Python mit ... als

Dieses:

# get_connection is a function that returns a connection to the db. 
with get_connection() as conn: 
    with conn.cursor() as cursor: 
     cursor.execute("SELECT * FROM test_table") 

or simply this: 

with get_connection() as conn: 
    cursor = conn.cursor() 
    cursor.execute("SELECT * FROM test_table") 

Antwort

0

Es scheint, dass psycopg2 Objekte die __exit__ Funktion nicht implementieren, damit sie nicht zu erklären, mit dem Block verwendet werden!

+2

Dies wurde implementiert. Version 2.5 (April 2013) war die erste Version, die Kontext-Manager verwendete, so dass "mit" -Blöcken nun erlaubt sind. – nofinator

2

Sie können jetzt with für psycopg2 Verbindungen und Cursor, beginnend mit Version 2.5 verwenden. Die Dokumentation ist here.

Es erwähnt:

Wenn eine Verbindung der mit Block beendet wird, wenn keine Ausnahme durch den Block angehoben worden ist, wird die Transaktion festgeschrieben. Im Fall von Ausnahme wird die Transaktion zurückgesetzt.

Deshalb glaube ich, die erste Code-Schnipsel der verschachtelten with Blöcke oben mit dem besseren Muster ist.

Verwandte Themen