PyMySQL 和 OrderedDict
Posted
技术标签:
【中文标题】PyMySQL 和 OrderedDict【英文标题】:PyMySQL and OrderedDict 【发布时间】:2016-02-03 22:46:32 【问题描述】:我使用 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
我想要的是,当我滚动光标时,我实际上是按照它们从数据库中进入的顺序检索列的 OrderedDict。
类似:
cursor = conn.cursor(pymysql.cursors.OrderedDict)
【问题讨论】:
在查询时添加另一列保存,源行和顺序? @Busturdust - 我可以在我的包装器中写一个函数说“query_ordered”或者在列表中有选择字段的东西,然后可以创建一个生成器来生成ordereddict来代替字典但是如果我可以在不写的情况下得到一个解决方案,而且这也可以很好地与我的包装器配合使用,我宁愿拥有它。 【参考方案1】:您可以使用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)
【讨论】:
完全按预期工作。刚刚在 PyMySQL 的 github 存储库中也看到了这一点。快速答复!谢谢!以上是关于PyMySQL 和 OrderedDict的主要内容,如果未能解决你的问题,请参考以下文章