2011-09-24 2 views
0

Les mises à jour d'une base de données informix via un script python utilisant pyodbc échouent silencieusement.Échec de la mise à jour SQL - pyodbc - informix

J'utilise la syntaxe comme il est prévu dans le wiki pyodbc et essayé manuel commettras ainsi que autocommit

cursor= conn.cursor() 
    cursor.execute("update eqpt set notes='BOB' where serialno='SAM'") 
    conn.commit() 
    conn.close() 

Je posté cette question dans le groupe pyodbc aussi bien, mais n'a malheureusement pas eu de réponse.

+0

Dans quel sens un re ils échouent? Avez-vous un objet dans 'eqpt' avec le numéro de série de' 'SAM''? Comment l'échec du signal pyodbc? Il n'y a pas de test visible dans le code affiché. Pourquoi auriez-vous besoin d'un curseur sur votre déclaration de mise à jour (ce qui peut montrer mon manque presque complet de connaissance de pyodbc)? C'est une déclaration singleton qui doit simplement être exécutée. Est-ce qu'un curseur doit être ouvert avant de faire quoi que ce soit? –

Répondre

1

Deux idées:

  1. Vérifiez nombre d'enregistrements a été modifié (il est retured par execute()), et le nombre d'enregistrements doivent être modifiés (en utilisant SELECT count(*) ... WHERE...:

    cursor= conn.cursor() 
    
    rs = c.execute("SELECT count(*) FROM eqpt WHERE serialno='SAM'") 
    for txt in c.fetchall(): 
        print('before %s' % (txt[0])) 
    
    rows_affected = cursor.execute("update eqpt set notes='BOB' where serialno='SAM'") 
    print('rows_affected: %d' % (rows_affected)) 
    
    rs = c.execute("SELECT count(*) FROM eqpt WHERE serialno='SAM'") 
    for txt in c.fetchall(): 
        print('after %s' % (txt[0])) 
    
    conn.commit() 
    conn.close() 
    
  2. Vous pouvez activer Le suivi ODBC et vérifier ce qui est retourné par le pilote ODBC