Python MySQLDB: Obtenir le résultat de fetchall dans une liste
Je voudrais obtenir le résultat de la fetchall opération dans une liste au lieu de tuple tuple ou tuple de dictionnaires.
Par exemple,
cursor = connection.cursor() #Cursor could be a normal cursor or dict cursor
query = "Select id from bs"
cursor.execute(query)
row = cursor.fetchall()
Maintenant, le problème est la résultante de la ligne est soit ((123,),(234,)) ou ({'id':123}, {'id':234})
Ce que je cherche, c'est (123,234) ou [123,234]. Si je peux économiser sur l'analyse de la resulset. Merci d'avance
- Probablement fournir un Curseur personnalisé classe pour ce faire. Le django db backends ce faire, de sorte que vous pourriez chercher l'inspiration là. Par exemple,
django.db.backends.mysql.base.CursorWrapper
est utilisé sur le dessus de la base de Curseur, mais je ne sais pas où c'est inscrit. Il peut fournir une coutume db backend qui renvoie votre Curseur personnalisé. Il sera probablement plus facile à analyser les données dont vous avez besoin lorsque vous y accédez.
Vous devez vous connecter pour publier un commentaire.
Et ce sur les interprétations de la liste? Si le résultat est
((123,), (234,), (345,))
:Si le résultat est
({'id': 123}, {'id': 234}, {'id': 345})
:Je suis sûr que, après tout ce temps, vous avez résolu ce problème, cependant, pour certaines personnes qui ne savent pas comment obtenir les valeurs d'un curseur comme un dictionnaire à l'aide de MySQLdb, vous pouvez utiliser cette méthode à la ici:
Ce vieux Q vient sur Google lors de la recherche pour l'aplatissement des requêtes db, donc voici d'autres suggestions...
Envisager une rapide liste-aplatissement de l'itérateur.
D'autres réponses utilisez
fetchall()
qui se charge tout d'abord toutes les lignes dans la mémoire, puis parcourt que de faire une nouvelle liste. Peut être inefficace. Peut se combiner avec MySQL soi-disant curseur côté serveur:Mais la question est aussi marqués de Django, qui a une belle seul champ de la requête de l'aplatissement
Si il n'y a qu'un seul champ, je peux l'utiliser pour faire une liste à partir de la base de données:
Faire votre curseur objet de cette manière:
Puis lorsque vous effectuez curseur.fetchall() dans une requête, un n-uplet de dictionnaires sera obtenu, que vous pourrez ensuite convertir en liste.