2017-09-21 4 views
-1

Voici mon bit de code qui provoque l'erreur. J'ai recherché ce problème en ligne mais je ne peux pas trouver une source qui m'aide à résoudre le problème dans mon code. J'utilise python pour exécuter des commandes SQL mais le problème ici est avec le python. Je ne vois pas pourquoi le code essaie de parcourir la variable 'x'.Pourquoi l'erreur "int object not iterable" est-elle générée?

while True: 
    x = 1 
    #states = api.get_states() 
    for s in states.states: 
     cursor.execute("UPDATE aircraft SET latitude = %s, longitude = %s, velocity = %s, heading = %s, callsign = %s", (getLat(s), getLon(s), getVel(s), getHeading(s), getCallsign(s))) 
     cursor.execute("WHERE entry = %r;",x) #this line is causing the error 
     x += 1 
    y = input("Database updated, enter 1 to update again or enter 0 to exit ") 
    if (y == 1): 
     continue 
    elif (y == 0): 
     print("Exiting program...") 
     break 
+0

@Spiderman merci pour votre réponse, pourquoi cela causerait l'erreur? – Flower

+0

Je l'imprime à chaque itération de boucle et il imprime un vecteur d'état auquel je m'attends, donc je suppose que la dernière itération de la boucle for est à l'origine du problème. – Flower

+0

Il serait utile à quiconque cherchant à répondre si vous avez spécifié le paquet que vous utilisez pour communiquer avec MySQL. –

Répondre

1

En supposant que vous utilisez un package compatible MySQL 2.0 DBAPI, il y a deux problèmes avec le code ici. Le premier est que DBAPI 2.0 spécifie que les paramètres de requête doivent être fournis en tant que itérable ou en tant que mappage. Mettre la valeur x en tuple ou une liste résoudrait ce problème.

cursor.execute("UPDATE aircraft SET latitude = %s, longitude = %s, velocity = %s, heading = %s, callsign = %s", (getLat(s), getLon(s), getVel(s), getHeading(s), getCallsign(s))) 
    cursor.execute("WHERE entry = %r;", tuple(x)) # [x] would also be valid. 

En outre, la déclaration doit tout faire partie d'un appel à cursor.execute. WHERE entry = 1 n'est pas une instruction SQL complète.

Source: PEP 249 - DBAPI 2.0 Specification

Edit: Montrer comment j'écrire la requête dans un seul appel exécuter.

La chaîne multiligne réalise l'effet que je pense op allait pour le fractionnement du staement et SQL ne généralement se soucie pas des espaces supplémentaires.

+0

Quelle serait la bonne façon d'en faire un appel cursor.execute? – Flower

+1

Je vais l'écrire dans un montage à la poste. –

+0

Correction, merci beaucoup – Flower