¿Cómo funcionan los cursores en la DB-API de Python?
He estado usando python con RDBMS '(MySQL y PostgreSQL), y he notado que realmente no entiendo cómo usar un cursor.
Por lo general, uno tiene su script conectado a la base de datos a través de un cliente DB-API (como psycopg2 o MySQLdb):
connection = psycopg2.connect(host='otherhost', etc)
Y luego uno crea un cursor:
cursor = connection.cursor()
Y luego uno puede emitir consultas y comandos:
cursor.execute("SELECT * FROM etc")
Ahora, ¿dónde está el resultado de la consulta, me pregunto? ¿Está en el servidor? o un poco en mi cliente y un poco en mi servidor? Y luego, si necesitamos acceder a algunos resultados, los buscamos:
rows = cursor.fetchone()
o
rows = cursor.fetchmany()
Ahora digamos que no recupero todas las filas y decido ejecutar otra consulta, ¿qué pasará con los resultados anteriores? Es su una sobrecarga.
Además, ¿debería crear un cursor para cada forma de comando y reutilizarlo continuamente para esos mismos comandos de alguna manera; Me dirijo que psycopg2 puede optimizar de alguna manera los comandos que se ejecutan muchas veces pero con diferentes valores, ¿cómo y vale la pena?
Gracias