30

Python ではmysqldb、次のようにカーソルをディクショナリ カーソルとして宣言できます。

cursor = db.cursor(MySQLdb.cursors.DictCursor) 

cursorこれにより、ループ内の列を次のように名前で参照できます。

for row in cursor:   # Using the cursor as iterator 
    city = row["city"]
    state = row["state"]

この MySQL コネクタを使用して辞書カーソルを作成することはできますか? http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html

彼らの例はタプルのみを返します。

MySQL の作成者が最終的に私たちのためにこれを行うと思いますか?

4

5 に答える 5

32

この記事によると、「dictionary=True」をカーソルコンストラクターに渡すことで利用できます: http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html

だから私は試しました:

cnx = mysql.connector.connect(database='bananas')
cursor = cnx.cursor(dictionary=True)

そして得た: TypeError:cursor()が予期しないキーワード引数 'dictionary'を取得しました

そして私は試しました:

cnx = mysql.connector.connect(database='bananas')
cursor = cnx.cursor(named_tuple=True)

そして得た: TypeError:cursor()が予期しないキーワード引数「named_tuple」を取得しました

そして私もこれを試しました:cursor = MySQLCursorDict(cnx)

しかし、役に立たない。明らかに私はここで間違ったバージョンを使用しており、http://downloads.mysql.com/docs/connector-python-relnotes-en.a4.pdfのドキュメントがこれらの新機能が執筆時点ではアルファ段階。

于 2014-08-05T20:50:35.053 に答える
17

MySQLCursor考えられる解決策には、次のようにクラスをサブクラス化することが含まれます。

class MySQLCursorDict(mysql.connector.cursor.MySQLCursor):
    def _row_to_python(self, rowdata, desc=None):
        row = super(MySQLCursorDict, self)._row_to_python(rowdata, desc)
        if row:
            return dict(zip(self.column_names, row))
        return None

db = mysql.connector.connect(user='root', database='test')

cursor = db.cursor(cursor_class=MySQLCursorDict)

現在、_row_to_python()メソッドはdictionaryではなく を返しますtuple

これは mysql フォーラムで見つけたもので、mysql 開発者自身によって投稿されたものだと思います。いつの日か mysql コネクタ パッケージに追加されることを願っています。

私はこれをテストしましたが、うまくいきます。

更新: 以下で Karl MW が述べたように、このサブクラスは mysql.connector の v2 では不要になりました。mysql.connector が更新され、次のオプションを使用して辞書カーソルを有効にできるようになりました。

cursor = db.cursor(dictionary=True)
于 2014-04-04T04:13:28.763 に答える