2013-10-25 3 views
1

이 코드 줄이이 오류를 발생시키는 MySQL 행의 데이터를 업데이트하려고합니다.MySQL 파이썬 업데이트 행

for k in range(city_count): 
    cur.execute("UPDATE hqstock SET citylastprice = '%s' WHERE id = '%s'"%(CITYPRICE[k], tID[k])) 

반환 된 오류 :

File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 201, in execute 
    self.errorhandler(self, exc, value) 
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
InterfaceError: (0, '') 

이 내 테이블 구조입니다.

+--------------------+------------------+------+-----+---------+-------+ 
| Field    | Type    | Null | Key | Default | Extra | 
+--------------------+------------------+------+-----+---------+-------+ 
| id     |int(11) unsigned | NO | PRI | NULL |  | 
| barcode   | char(15)   | YES |  | NULL |  | 
| citycurstock  | smallint(6)  | YES |  | NULL |  | 
| citylastprice  | demical(4,2)  | YES |  | NULL |  | 
| city    | varchar(60)  | YES |  | NULL |  | 
+--------------------+------------------+------+-----+---------+-------+ 

내 쿼리 문에 무엇이 잘못 되었습니까? 또는 왜 이것이 효과가 없습니까?

+0

중복 가능성 [mysqldb interfaceError (http://stackoverflow.com/questions/5704590/mysqldb-interfaceerror) 및 [InterfaceError (0, '') (HTTP : //stackoverflow.com/q/6650940) –

+3

참고 : 문자열 보간을 사용하지 마십시오. 대신에 SQL 매개 변수를 사용하십시오 :'cur.execute ("UPDATE hqstock SET citylastprice = % s WHERE id = % s", (CITYPRICE [k], tID [k]))'; 이것은 데이터베이스 어댑터에 인용문을 남깁니다 (더 안전하고 편리합니다). –

답변

1

이 시도 :

for k in range(city_count): 
    cur.execute("UPDATE hqstock SET citylastprice = '%s' WHERE id = '%s'"% (CITYPRICE[k], tID[k])) 
    cur.commit() 
+0

은 매력처럼 작동합니다. 이것은 두 번째 문제가 발생하는 데 도움이됩니다. 고맙습니다 – user2828757