web-dev-qa-db-fra.com

pymysql fetchall () résultats dans le dictionnaire?

Est-il possible d'obtenir les résultats d'un fetchall () sous forme de dictionnaire utilisant pymysql?

39
Ricky

PyMySQL inclut une DictCursor. Ça fait ce que je pense que tu veux. Voici comment l'utiliser:

import pymysql
connection = pymysql.connect(db="test")
cursor = connection.cursor(pymysql.cursors.DictCursor)
cursor.execute("SELECT ...")

https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/tests/test_DictCursor.py

71
Seun Osewa

Utilisez pymysql.cursors.DictCursor, qui renverra les lignes représentées par des dictionnaires mappant les noms de colonne sur des valeurs.

Quelques façons de l'utiliser ...

Créez un objet de connexion et faites en sorte que tous les curseurs générés soient DictCursors:

>>>import pymysql
>>>connection = pymysql.connect(db='foo', cursorclass=pymysql.cursors.DictCursor)
>>>with connection.cursor() as cursor:
...     print cursor
... 
<pymysql.cursors.DictCursor object at 0x7f87682fefd0>
>>>with connection.cursor() as cursor:
...     cursor.execute("SELECT * FROM bar")
...     print cursor.fetchall()
... 
2
[{u'col2': 'rty', u'col1': 'qwe'}, {u'col2': 'fgh', u'col1': 'asd'}]

Créez une DictCursor à partir d'un objet de connexion ordinaire:

>>>connection = pymysql.connect(db='foo')
>>>with connection.cursor(pymysql.cursors.DictCursor) as cursor:
...     print cursor
... 
<pymysql.cursors.DictCursor object at 0x7f876830c050>

Connectez-vous et créez une DictCursor sur une seule ligne avec with:

>>>from pymysql.cursors import DictCursor
>>>with pymysql.connect(db='foo', cursorclass=DictCursor) as cursor:
...     print cursor
... 
<pymysql.cursors.DictCursor object at 0x7f8767769490>
25
Mark Amery

Utilisez un DictCursor dans la méthode de curseur ().

3
d0nut

Si vous voulez dire que vous voulez récupérer deux colonnes et les renvoyer sous forme de dictionnaire, vous pouvez utiliser cette méthode.

def fetch_as_dict(cursor select_query):
    '''Execute a select query and return the outcome as a dict.'''

    cursor.execute(select_query)
    data = cursor.fetchall()
    try:
        result = dict(data)
    except:
        msg = 'SELECT query must have exactly two columns'
        raise AssertionError(msg)

    return result
0
physicalattraction