2017-04-26 3 views
0

Je suis en train de récupérer des données à partir AWS MariaDB:curseur Python MySQL échoue chercher les lignes

cursor = self._cnx.cursor() 
stmt = ('SELECT * FROM flights') 

cursor.execute(stmt) 

print(cursor.rowcount) 
# prints 2 

for z in cursor: 
    print(z) 
# Does not iterate 

row = cursor.fetchone() 
# row is None 

rows = cursor.fetchall() 
# throws 'No result set to fetch from.' 

Je peux vérifier que la table contient des données en utilisant MySQL Workbench. Est-ce que je manque une étape?

EDIT: re 2 réponses:

res = cursor.execute(stmt) 
# res is None 

EDIT:

J'ai créé nouveau projet Python avec un seul fichier:

import mysql.connector 

try: 
    cnx = mysql.connector.connect(
     host='foobar.rds.amazonaws.com', 
     user='devuser', 
     password='devpasswd', 
     database='devdb' 
    ) 

    cursor = cnx.cursor() 
    #cursor = cnx.cursor(buffered=True) 

    cursor.execute('SELECT * FROM flights') 

    print(cursor.rowcount) 
    rows = cursor.fetchall() 

except Exception as exc: 
    print(exc) 

Si je lance ce code avec le curseur simple, fetchall déclenche "Aucun jeu de résultats à extraire". Si je cours avec le curseur buffered, je peux voir que la propriété _rows du curseur contient mes données, mais fetchall() retourne le tableau vide.

Répondre

1

Vous devez soit:

row = cursor.execute(stmt).fetchone() 

Ou:

rows = cursor.execute(stmt).fetchall() 
+0

execute retourne None alors fetch et fetchall déclenche une exception à propos de l'appel de la méthode None Aucun – jpou

+0

Il se passe alors quelque chose d'autre. Est-ce votre code complet? – bernie

0

Votre problème est que cursor.execute(stmt) retourne un objet avec des résultats et vous ne stockez pas que.

results = cursor.execute(stmt) print(results.fetchone()) # Prints out and pops first row

+0

execute restaure None, donc jette une exception à propos de l'appel de la méthode sur le type None – jpou

+0

Hmmm ... Je pense avoir trouvé quelques détails sur ce que votre curseur pourrait renvoyer. Peut-être que ce n'est pas configuré correctement? https://dev.mysql.com/doc/connector-python/fr/connector-python-api-mysqlconnection-cursor.html –

0

Pour l'avenir Googlers avec le même problème que je trouve une solution qui peut aider dans certains cas:

Je ne trouve pas la source du problème, mais une solution qui a fonctionné pour moi.

Dans mon cas, .fetchone() ne renvoyait pas non plus ce que j'ai fait sur ma base de données locale (sur mon propre ordinateur). J'ai essayé exactement le même code avec la base de données sur notre serveur de compagnie et d'une manière ou d'une autre cela a fonctionné. J'ai donc copié la base de données complète du serveur sur ma base de données locale (en utilisant des dumps de base de données) juste pour obtenir les paramètres du serveur et ensuite j'ai pu obtenir des données de mon serveur SQL local avec le code qui ne fonctionnait pas auparavant.

Je suis un SQL-newbie mais peut-être un paramètre fou sur mon serveur SQL local m'a empêché d'aller chercher des données. Peut-être qu'un utilisateur SQL plus expérimenté connaît ce paramètre et peut l'expliquer.