2015-11-03 72 views
9

我一直在使用PyMySQL一段时间,并创建我自己的包装,我习惯于简化写查询。尽管如此,我一直在使用OrderedDict创建CSV文件,因为我需要保持顺序相同,但我意识到如果我使用PyMySQL查询数据库,我不会得到数据库返回的订单。如果我只想转储内容而不是手写订单,这对于检查CSV文件有点麻烦。PyMySQL和OrderedDict

我的问题是,我如何在OrderedDict中使用PyMySQL?目前,我的代码如下:

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

添加另一个colu mn哪个持有,查询时源行和顺序? – Busturdust

+0

@Busturdust - 我可以在我的包装器中写一个函数,如“query_ordered”,或者在列表中有选择字段的东西,然后可以创建一个生成ordereddict的生成器来代替字典,但如果我可以得到一个解决方案没有写出来,这也可以很好地与我的包装,我宁愿那样。 – DataHerder

回答

14

你可以使用cursors.DictCursorMixin并改变其dict_typecollections.OrderedDict(默认为dict):

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

class OrderedDictCursor(DictCursorMixin, Cursor): 
    dict_type = OrderedDict 

然后你就可以使用新的光标类如下图所示

cursor = conn.cursor(OrderedDictCursor) 
+1

完全按照预期工作。刚刚在PyMySQL的github仓库中也看到了这一点。快速回答!谢谢! – DataHerder

+0

谢谢。伟大的作品 –

+0

这真是太神奇了!谢谢 –