2016-02-09 1 views
4

Je me connecte à la base de données mysql via le connecteur mysql et lance une simple requête pour extraire une liste d'identifiants. Je dois faire une boucle sur cette liste et les passer dans un autre code. Pour une raison quelconque, je reçois une liste de tuples. Est-ce que ce comportement est attendu? Sinon, qu'est-ce que je fais de mal? Voici l'extrait de mon code:Le connecteur mysql Python renvoie le tuple

import mysql.connector 
conn = mysql.connector.connect(host='127.0.0.1', database='t', user='r', password='pwd') 
cursor = conn.cursor() 
query = ("select id from T where updated < '%s'" % (run_date)) 
cursor.execute(query) 
for row in cursor: 
    print (row) 

cursor.close() 

Je reçois le suivant retour (d'un champ INT en d/b):

(Decimal('991837'),) 
(Decimal('991838'),) 
(Decimal('991839'),) 
(Decimal('991871'),) 
(Decimal('991879'),) 
(Decimal('991899'),) 
(Decimal('992051'),) 
(Decimal('992299'),) 
(Decimal('992309'),) 

Répondre

2

Oui, ce comportement est normal. Utiliser le curseur comme itérable équivaut fondamentalement à une boucle en utilisant la méthode fetchone(). De la documentation for fetchone() (Souligné par l'auteur):

Cette méthode récupère la ligne suivante d'un jeu de résultats de requête et retourne une seule séquence ou Aucun si aucune des lignes disponibles. Par défaut, le tuple retourné est constitué de données renvoyées par le serveur MySQL, converti en objets Python. Si le curseur est un curseur brut, aucune conversion ne se produit;

+0

Pas vraiment lié à la question originale que j'ai posée, mais comment convertir (Decimal ('992309'),) en 992309? – epipko

+1

@epipko Saisissez le premier élément du tuple ('[0]'), alors vous avez un [Objet décimal] (https://docs.python.org/2/library/decimal.html#decimal-objects) que vous pouvez convertir en 'int' si vous en avez besoin. – glibdud