En las pruebas, encontré que la respuesta seleccionada (convertir dict a OrderedDict) no es confiable para preservar el orden de las columnas de resultados de la consulta.
La respuesta de @vaultah en una pregunta similar
sugiere usar pymysql.cursors.DictCursorMixin
:
...para crear un cursor que recuerde el orden correcto de las columnas:
Luego obtenga sus resultados como de costumbre:
results = cursor.fetchall()
for row in results:
print row # properly ordered columns
Prefiero este enfoque porque es estable, requiere menos código y maneja los pedidos en el nivel adecuado (a medida que se leen las columnas).