PyMySQL and OrderedDict

11

我已经使用PyMySQL有一段时间了,并创建了自己的包装器,用于缩短编写查询的时间。但是,我一直在使用OrderedDict创建CSV文件,因为我需要保持顺序,但我意识到如果我使用PyMySQL进行数据库查询,那么返回的顺序将不会与数据库给出的顺序相同。这对于检查CSV文件有点麻烦,如果我只想倾倒东西而不是手写订单。

我的问题是,如何使用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

我希望的是,当我通过光标滚动时,实际上能够按照它们从数据库中获取的顺序检索有序字典中的列。

类似于这样:

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

添加另一列来保存源行,并在查询时按照该列排序? - Busturdust
@Busturdust - 我可以在我的封装中编写一个名为“query_ordered”的函数,或者类似的函数,该函数将选择字段作为列表,并可以创建生成器以代替字典来产生有序字典,但如果我能够找到一种无需编写该函数并且也能与我的封装很好协作的解决方案,那我宁愿这样。 - Paul Carlton
1个回答

19
你可以使用并将其更改为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
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Paul Carlton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接