2012-03-17 2 views
1

MySQLdb를 사용하여 데이터베이스를 만들었습니다.Mysqldb 업데이트 오류 typeerror 'str'개체를 호출 할 수 없습니다.

id(is int), 
id_user(is int), 
f_name(is str), 
l_name(is str) 

나는 기능 업데이트와 행을 업데이트 : 데이터베이스에서 나는 열 이름의 학생이있는 테이블이있다. 내 코드는 다음과 같습니다 :

def UpdateUser(self,e):   
     self.checkid_user=int(self.updateid[0]) #ok there 
     self.c2name=self.name.GetValue() #this is from a textctrl in wxpython 
     self.c2lastname=self.lastname.GetValue()#this is from a textctrl in wxpython 

     ne=self.c2name.encode("utf-8")#greek word 
     fe=self.c2lastname.encode("utf-8")#greek word 

     f="'"+str(ne)+"'" 
     l="'"+str(fe)+"'" 

     print f #ok 
     print l #ok 
     db=mdb.connect(host="localhost",use_unicode="True",charset="utf8",user="root",passwd="root",db="test") 
     cursor = db.cursor() 

     sql="""SELECT id_user FROM student""" 

     try: 
      # Execute the SQL command 
      cursor.execute(sql) 
      # Commit your changes in the database 
      db.commit() 
     except: 
      # Rollback in case there is any error 
      db.rollback() 

     rows = cursor.fetchall() 

     for row in rows: 
      r=int(row[0]) 
      if r==self.checkid_user:     #ok there 
       sql2 = """UPDATE student 
       SET f_name=%s,l_name=%s 
       WHERE id_user=%s""" 

       # Execute the SQL command 
       cursor.execute(sql2(f,l,r)) 
     # Commit your changes in the database 
       db.commit() 

       db.rollback() 
# disconnect from server 
db.close() 

내가 추적 오류를 가지고 함수를 실행하면 :

 
typeerror 'str' object is not callable 

내가 호출하지만 아무것도 할 fl을 사용합니다.
이 문제를 해결하려면 여기에 도움이 필요합니다. 감사!

+2

후 오류 메시지의 나머지
그러나 sql2가 아니라 문자열을 포함합니다. 오류가 실제로 어디에 있는지 알려줍니다. – kindall

답변

4

이 다른 문제 일 수 있지만, 이제이 시작하자 수 있습니다

cursor.execute(sql2(f,l,r)) 

이 ... 잘못된 것입니다.

당신은 인수 사이에 쉼표가 필요합니다

cursor.execute(sql2, (f,l,r)) 

귀하의 코드는 함수 호출과 같습니다 this_is_how_we_call_a_func() < - 괄호에주의! 증거가 표시됩니다으로 - - 호출하지 ...

>>> dir(sql2) 
['__add__', '__class__', '__contains__', '__delattr__', ... other stuff 

>>> def my_func(): pass 
... 
>>> dir(my_func) 
['__call__', '__class__', '__closure__', '__code__', ... other stuff 
^^^^^^^^^^ 
+0

Yeeeeeeees, 누군가 다른 사람이 누락 된 코드를 찾아야합니다 !!! – TLSK

+0

이런 일이 매일 저에게 일어납니다. 가서 그 다음 버그를 잡아라! – bernie

+0

다른 코드에 대한 답변을 가지고 비슷한 코드에 대한 실수를하면 저를 화나게 만듭니다. 고마워요 !! – TLSK