mysqldb example datos consultar conectar con 4b4 python mysql optimization cursor

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)