Como os cursores funcionam na DB-API do Python?

Eu tenho usado python com RDBMS '(MySQL e PostgreSQL), e notei que realmente não entendo como usar um cursor.

Geralmente, um deles tem seu script conectado ao banco de dados por meio de uma API de banco de dados cliente (como psycopg2 ou MySQLdb):

connection = psycopg2.connect(host='otherhost', etc)

E então cria-se um cursor:

cursor = connection.cursor()

E então pode-se emitir consultas e comandos:

cursor.execute("SELECT * FROM etc")

Agora, onde está o resultado da consulta, eu me pergunto? está no servidor? ou um pouco no meu cliente e um pouco no meu servidor? E então, se precisarmos acessar alguns resultados, buscamos:

rows = cursor.fetchone() 

ou

rows = cursor.fetchmany()

Agora, digamos, eu não recupero todas as linhas e decido executar outra consulta, o que acontecerá com os resultados anteriores? É uma sobrecarga.

Além disso, devo criar um cursor para cada forma de comando e reutilizá-lo continuamente para os mesmos comandos de alguma forma; Eu considero que o psycopg2 pode de alguma forma otimizar comandos que são executados muitas vezes, mas com valores diferentes, como e vale a pena?

Valeu

questionAnswers(3)

yourAnswerToTheQuestion