2012-05-18 2 views
1
pyodbc을 사용하여 MSSQL에서 데이터를 쿼리하는 기능을 사용하려고 할 때 내가하는 데 문제

을에서 함수 내에서 쿼리를 실행해야합니다, 기능은 다음과 같습니다형식 오류 문자열 인덱스는 정수 때 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 

난을 가져올 때 모듈이 기능을 실행, 그것은이 형식 오류 발생 : 내가 복사 할 경우

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 

및 파이썬 IDLE에서 이러한 라인의 각 실행, 그것을 잘 실행 오류 때 커서를 실행하지 않습니다. 그것은 입력 매개 변수로 pyodbc 또는 sqlite 연결을 전달할 때 발생합니다.

감사

+2

'+'로 끝나는 라인에서 SyntaxError를 얻습니다. –

답변

0

는, 구문 문제를 해결 라인을 변경하려면 다음 중 하나에

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

을 (줄 바꿈을 보존하지 않음) :

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

또는 (줄 바꿈 보존) :

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

줄 바꿈에 대한 자세한 내용은 스타일 가이드의 Maximum Line Length section을 참조하십시오.

+0

감사합니다 beargle하지만 문제가 해결되지 않으면 전체 쿼리 문자열을 한 줄에 넣으려고했습니다. 어쨌든, IDLE을 재시작하고 다시 실행하면 함수가 올바르게 작동하며 모듈 가져 오기를 방해하는 것이어야합니다. 분명히 명령 줄에서 모듈을 실행하면 함수가 제대로 작동합니다. – sinner