Was sind die Vor- und Nachteile eines Cursors Wiederverwendung gegen einen neuen Cursor erstellen?

StackOverflow https://stackoverflow.com/questions/2035212

Frage

In cx_Oracle (oder Oracle im Allgemeinen) ist es möglich, einen Cursor für jede Abfrage zuweisen oder einen Cursor über mehrere Abfragen wieder zu verwenden.

def getSomeData(curs):         # case 1: pass in a cursor, which is generally
    curs.execute('select ...') #         reused across queries
    return curs.fetchall()

def getSomeData(conn):         # case 2: pass in a connection,allocate
    curs=conn.cursor()         #         a cursor for this query
    curs.execute('select ...')
    return curs.fetchall()

Natürlich kehren beide Ansätze die gleichen Daten.

Was sind die Vor- und Nachteile zwischen den beiden Ansätzen? Ist ein besonders mehr oder weniger leistungsfähig? Gibt es irgendwelche möglichen Gefahren eines Cursors über viele Anfragen an die Wiederverwendung?

War es hilfreich?

Lösung

Sie können einen cx_Oracle Cursor so viele wiederverwenden, wie Sie mögen, kein Problem. Wenn Sie Tausende von kleinen Anfragen in einem kleinen Raum der Zeit ausgeführt wird, Sie könnte sieht eine leichte Leistungssteigerung durch Wiederverwendung des Cursors, aber ich bezweifle es.

Ich werde manchmal neue Cursor erstellen, und ein anderes Mal wiederverwenden eine vorhandene, je nachdem, ob es der Code leichter zu lesen macht und zu verstehen.

Zum Beispiel, wenn ich eine Vielzahl von Verfahren haben die Notwendigkeit, die Datenbank zuzugreifen, könnte ich eine Oracle-Verbindung Objekt übergeben um, oder einen Cursor auf dieser Verbindung erstellt.

Was macht Ihr Code besser lesbar und leichter zu pflegen ist, was ich für gehen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top