Nos testes, descobri que a resposta selecionada (converter dict em OrderedDict) não é confiável na preservação da ordem das colunas do resultado da consulta.
resposta de @vaultah em uma pergunta semelhante sugere usar
pymysql.cursors.DictCursorMixin
:...para criar um cursor que lembra a ordem correta das colunas:
Em seguida, obtenha seus resultados normalmente:
results = cursor.fetchall()
for row in results:
print row # properly ordered columns
Eu prefiro essa abordagem porque é estável, requer menos código e lida com a ordenação no nível apropriado (à medida que as colunas são lidas).