Ich habe Python mit RDBMS '(MySQL und PostgreSQL) verwendet, und ich habe festgestellt, dass ich wirklich nicht verstehe, wie man einen Cursor verwendet.Wie funktionieren Cursor in Pythons DB-API?
Normalerweise man habe sein Skript über einen Client DB-API (wie psycopg2 oder MySQLdb) an die DB verbinden:
connection = psycopg2.connect(host='otherhost', etc)
Und dann schafft man einen Cursor:
cursor = connection.cursor()
Und dann man kann Abfragen und Befehle ausgeben:
cursor.execute("SELECT * FROM etc")
Jetzt wo ist das Ergebnis der Abfrage, frage ich mich? ist es auf dem Server? oder ein wenig auf meinem Client und ein bisschen auf meinem Server? Und dann, wenn wir einige Ergebnisse zugreifen müssen, holen wir ‚em:
rows = cursor.fetchone()
oder
rows = cursor.fetchmany()
Jetzt können sagen, ich rufe nicht alle Zeilen und entscheiden, eine andere Abfrage auszuführen, Was wird mit den vorherigen Ergebnissen passieren? Ist das ein Overhead?
Auch sollte ich einen Cursor für jede Form von Befehl erstellen und ihn für diese Befehle irgendwie immer wiederverwenden; Ich Kopf psycopg2 kann irgendwie Befehle optimieren, die viele Male ausgeführt werden, aber mit unterschiedlichen Werten, wie und ist es das wert?
Thx
Re: Best Practices für die Cursor, aus der FAQ (http://initd.org/psycopg/docs/faq.html): „Unser Vorschlag fast immer auf einen neuen Cursor erstellen und alte, sobald der entsorgen Daten sind nicht mehr erforderlich (close close() auf ihnen.) Die einzige Ausnahme sind enge Schleifen, wo man normalerweise den gleichen Cursor für eine ganze Reihe von INSERTs oder UPDATEs verwendet. " –