¿Cómo crear un gran marco de datos de pandas a partir de una consulta de SQL sin quedarse sin memoria?

Tengo problemas para consultar una tabla de> 5 millones de registros de mi base de datos de MS SQL Server. Quiero poder seleccionar todos los registros, pero mi código parece fallar al seleccionar muchos datos en la memoria.

Esto funciona:

import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

...Pero esto no funciona:

sql = "SELECT TOP 2000000 * FROM MyTable" 
data = psql.read_frame(sql, cnxn)

Devuelve este error:

File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error

he leídoaquí que existe un problema similar cuando se crea un marco de datos a partir de un archivo csv, y que la solución es usar los parámetros 'iterador' y 'tamaño' como este:

read_csv('exp4326.csv', iterator=True, chunksize=1000)

¿Existe una solución similar para consultar desde una base de datos SQL? Si no es así, ¿cuál es la solución preferida? ¿Necesito leer los registros en trozos por algún otro método? Leo un poco de discusionaquí para trabajar con grandes conjuntos de datos en pandas, pero parece mucho trabajo ejecutar una consulta SELECT *. Seguramente hay un enfoque más sencillo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta