He estado usando python con RDBMS '(MySQL y PostgreSQL), y he notado que realmente no entiendo cómo usar un cursor.¿Cómo funcionan los cursores en la DB-API de Python?
Por lo general, uno tiene su guión conectarse a la base de datos a través de un cliente de DB-API (como psycopg2 o MySQLdb):
connection = psycopg2.connect(host='otherhost', etc)
Y entonces se 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 sobre mi cliente y un poco sobre mi servidor? Y luego, si es necesario acceder a algunos resultados, buscamos a ellos:
rows = cursor.fetchone()
o
rows = cursor.fetchmany()
Ahora digamos que, no recuperar todas las filas, y decidir 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; Dirijo psycopg2 de alguna manera puede optimizar los comandos que se ejecutan muchas veces, pero con diferentes valores, ¿cómo y lo vale?
Thx
Re: mejores prácticas para los cursores, de las preguntas más frecuentes (http://initd.org/psycopg/docs/faq.html): "Nuestra sugerencia es crear casi siempre un cursor nuevo y deshacerse de los antiguos tan pronto como el ya no se requieren datos (call close() en ellos.) La única excepción son los bucles estrechos donde uno usualmente usa el mismo cursor para un conjunto completo de INSERT o UPDATE. " –