2012-05-18 1 views
1

Je vais avoir du mal en essayant d'utiliser la fonction d'interroger des données dans MSSQL en utilisant pyodbc, la fonction est:indices de chaîne de TypeError doivent être des entiers quand exécuter la requête au sein de la fonction dans pyodbc

def getUserList(connection): 
    li = [] 
    cur = connection.cursor() 
    query = 'select username, password, firstname, lastname, description, phone,'+ 
      'email, isAdmin, isAutoBoot from users_tbl'  
    cur.execute(query) 
    for usr, pwd, fn, ln, des, ph, em, ad, au in cur.fetchall():   
     temp = User(usr, pwd, fn, ln, des, ph, em, ad, au)    
    cur.close() 
    #con.close() 
    return li 

Quand j'importer les module et exécuter cette fonction, il rencontrent le TypeError:

Traceback (most recent call last): 
File "<pyshell#71>", line 1, in <module> 
    import_user.getUserList(s_con) 
File "c:/python27/mymodule\import_user.py", line 12, in getUserList 
    cur.execute(query) 
TypeError: string indices must be integers 

Toutefois, si je copier et exécuter chacune de ces lignes en Python IDLE, il fonctionne très bien et aucune erreur lors d'exécuter le curseur. Cela arrive quand je passe la connexion pyodbc ou sqlite comme paramètre d'entrée.

Merci

+2

Je reçois SyntaxError sur la ligne qui se termine par '+'. –

Répondre

0

Pour résoudre le problème de syntaxe, changer ces lignes:

query = 'select username, password, firstname, lastname, description, phone,'+ 
     'email, isAdmin, isAutoBoot from users_tbl' 

soit (saut de ligne non conservés):

query = ('select username, password, firstname, lastname, description, phone, ' 
     'email, isAdmin, isAutoBoot from users_tbl') 

ou (nouvelle ligne conservée):

query = """select username, password, firstname, lastname, description, phone, 
      email, isAdmin, isAutoBoot from users_tbl""" 

Voir le Maximum Line Length section du guide de style pour plus d'informations sur l'habillage de ligne.

+0

Merci Beargle mais il ne résout pas le problème, j'ai même essayé de mettre toute la chaîne de requête dans une ligne. Quoi qu'il en soit, j'ai redémarré IDLE et l'exécuter à nouveau et la fonction fonctionne bien, doit être quelque chose qui interfère avec l'importation du module. Apparemment, la fonction fonctionne bien si je lance le module à partir de la ligne de commande – sinner

Questions connexes