2015-11-03 7 views
9

私はPyMySQLをしばらく使用していましたが、独自のラッパーを作成していました。それでも、私は注文を同じに保つ必要があるので、OrderedDictでCSVファイルを作成していましたが、データベースを照会するために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。

ような何か:あなたはcursors.DictCursorMixinを使用し、そのdict_typecollections.OrderedDictにを変更することができ

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

別の列を追加mnは、ソース行とそれを照会するときに順序を保持しますか? – Busturdust

+0

@Busturdust - 私は自分のラッパーに "query_ordered"というような関数を書くことができます。リスト内の選択フィールドを持っていて、辞書の代わりにordereddictを生成するジェネレータを作成できます。それを書かずに、私のラッパーでもうまくいくでしょう、私はむしろそれを持っています。 – DataHerder

答えて

14

(デフォルトは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

これはとても甘い甘いです!ありがとう –

関連する問題