2015-11-03 4 views
9

Я уже некоторое время использую PyMySQL и создаю свою собственную оболочку, к которой я привык писать короткие запросы. Тем не менее я создавал файлы CSV с помощью OrderedDict, потому что мне нужно поддерживать порядок одинаково, но я понимаю, что если я буду использовать PyMySQL для запроса базы данных, я не получу порядок, который возвращает база данных. Это немного раздражает для выборочных проверок CSV-файлов, если я хочу просто сбрасывать материал, а не писать команды.PyMySQL и OrderedDict

Мой вопрос: как я могу использовать PyMySQL с OrderedDict? В настоящее время мой код выглядит следующим образом:

import pymysql 
conn = pymysql.connect(host='localhost', user='root', passwd='', db='test') 
cursor = conn.cursor(pymysql.cursors.DictCursor) 

Поэтому, когда я запрашиваю, я буду получать словарь обратно:

cursor.execute("""SELECT * FROM test""") 
for row in cursor: 
    pp(row) # gives me dictionary 

То, что я хочу, что когда я качусь через курсор, я на самом деле извлечения OrderedDict столбцов в порядке их поступления из базы данных.

Что-то вроде:

cursor = conn.cursor(pymysql.cursors.OrderedDict) 
+0

Добавить еще один коло mn, который содержит строку источника и порядок при запросе? – Busturdust

+0

@Busturdust - я мог бы написать в своей обертке функцию say «query_ordered» или что-то, что имеет поля выбора в списке, а затем может создать генератор для получения упорядоченного словаря вместо словаря, но если я могу просто получить решение не написав это, и это тоже хорошо сыграло бы с моей оберткой, я бы предпочел это. – DataHerder

ответ

14

Вы можете использовать cursors.DictCursorMixin и изменить его dict_type к collections.OrderedDict (по умолчанию dict):

from collections import OrderedDict 
from pymysql.cursors import DictCursorMixin, Cursor 

class OrderedDictCursor(DictCursorMixin, Cursor): 
    dict_type = OrderedDict 

Затем вы можете использовать новый класс курсора, как показано ниже

cursor = conn.cursor(OrderedDictCursor) 
+1

Работает точно так, как ожидалось. Просто увидел это в репозитории github PyMySQL. Быстрый ответ! Благодаря! – DataHerder

+0

спасибо. отлично работает –

+0

Это так чертовски мило! благодаря –

Смежные вопросы