datos - python mysql example
¿Cómo utilizar eficientemente MySQLDB SScursor? (3)
Alternativamente, puede usar SSCursor
fuera del objeto de conexión (es muy importante cuando ya define la conexión y no quiere que toda la conexión use SSCursor
como una clase de cursor).
import MySQLdb
from MySQLdb.cursors import SSCursor # or you can use SSDictCursor
connection = MySQLdb.connect(
host=host, port=port, user=username, passwd=password, db=database)
cursor = SSCursor(connection)
cursor.execute(query)
for row in cursor:
print(row)
Tengo que lidiar con un gran conjunto de resultados (podrían ser cientos de miles de filas, a veces más).
Desafortunadamente necesitan ser recuperados todos a la vez (al inicio).
Estoy tratando de hacer eso usando la menor cantidad de memoria posible.
Al mirar SO, descubrí que usar SSCursor
podría ser lo que estoy buscando, pero todavía no sé cómo usarlos exactamente.
Está haciendo un fetchall()
desde un cursor base o un SScursor igual (en términos de uso de memoria)?
¿Puedo "transmitir" de la secuencia mis filas una por una (o unas pocas por unas pocas) y si es así,
¿Cual es la mejor manera de hacerlo?
Definitivamente use el SSCursor cuando busque grandes conjuntos de resultados. Hizo una gran diferencia para mí cuando tuve un problema similar. Puedes usarlo así:
import MySQLdb
import MySQLdb.cursors
connection = MySQLdb.connect(
host=host, port=port, user=username, passwd=password, db=database,
cursorclass=MySQLdb.cursors.SSCursor) # put the cursorclass here
cursor = connection.cursor()
Ahora puede ejecutar su consulta con cursor.execute()
y usar el cursor como un iterador.
Editar : quitó iterador de cosecha propia innecesario, gracias Denis!
Estoy de acuerdo con la respuesta de Otto Allmendinger, pero para hacer un comentario explícito de Denis Otkidach, aquí es cómo puedes iterar sobre los resultados sin usar la función fetch () de Otto:
import MySQLdb.cursors
connection=MySQLdb.connect(
host="thehost",user="theuser",
passwd="thepassword",db="thedb",
cursorclass = MySQLdb.cursors.SSCursor)
cursor=connection.cursor()
cursor.execute(query)
for row in cursor:
print(row)