Tengo que lidiar con un gran conjunto de resultados (podría haber cientos de miles de filas, a veces más).
Desafortunadamente necesitan ser recuperados todos a la vez (al inicio).¿Cómo utilizar eficientemente el MySQLDB SScursor?
Estoy tratando de hacer eso usando la menor cantidad de memoria posible.
Al mirar en SO he encontrado 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 de 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) y si es así,
¿cuál es la mejor manera de hacerlo?
Supongo que eso era lo que estaba buscando, gracias – Sylvain
¿Esto trae filas una por una? Si no, ¿cuántas filas trae esto de una vez? Tengo un DB con más de 37 millones de registros. Necesito leer los registros uno por uno y ponerlos en un archivo (con algunas cosas adicionales, así que no puede ser un simple volcado). ¿Se puede hacer esto en paralelo de alguna manera? Por ejemplo, busco 10000 filas, escríbelas y mientras las escribo se van obteniendo algunas filas, y así sucesivamente. – Sohaib
@Sohaib: Esto se obtiene una fila a la vez. Si su problema está vinculado a la CPU, puede usar multiprocesamiento (Python2/3) o concurrent.futures (en Python3) para configurar varios lectores de DB, pero solo debe usar un escritor en el archivo, de lo contrario los registros se obtendrán distorsionado. [Si su problema está vinculado a IO] (http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks-with-multiprocessing/) - si escribir en el archivo es el cuello de botella - luego configurar varios lectores no acelerará el trabajo. – unutbu