2009-07-24 4 views
0

여기서 잘못된 것은 무엇입니까?파이썬 오류 : int 인수가 필요합니다.

i = 0 
cursor.execute("insert into core_room (order) values (%i)", (int(i)) 

오류 :

int argument required 

데이터베이스 필드를 int (11),하지만 난은 % i는 오류를 생성 생각합니다.

업데이트 :

time = datetime.datetime.now() 
floor = 0 
i = 0 

시도 : booster_cursor.execute ('core_room에 삽입 (extern_id, 이름, 순서, unit_id, 생성, 업데이트) 값 여기

는보다 철저한 예제 (행 [0], 행 [0], i, 바닥, 시간, 시간)) 예외를 제외하고, e : 인쇄 e

오류 :

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order, unit_id, created, updated) values ('99', '99', '235', '12', '2009-07-24 1' at line 1") 

답변

4

두 가지. 먼저 을 사용하고 %i을 사용하지 마세요. 둘째 매개 변수는 튜플에 있어야합니다. 따라서 (i,) (쉼표는 i)이 필요합니다.

또한 ORDER은 키워드이므로 필드 이름으로 사용하는 경우 이스케이프해야합니다.

+0

% i 인수는 db의 int입니다. % s을 (를) 사용해야합니까? – slypete

+0

@slypete : 예,'% s'을 사용하십시오. MySQLdb는 디폴트'paramstyle'으로'format'을 사용합니다. 자세한 정보는 PEP 249 : http://www.python.org/dev/peps/pep-0249/ – bernie

+1

% s를 사용하면 MySQL 서버에서 SQL 오류가 발생합니다. – slypete

1

execute()의 두 번째 인수는 반복 가능한 것으로 예상됩니다. 이 경우 당신은 변경해야

(int(i)) 

에 :

(int(i),) 

이 튜플로를 확인합니다.

+0

정확하게이 문제가 해결됩니다. –

1

아마도 %i 대신 ?을 사용해야합니다. 그리고 괄호가 빠져 있습니다.

cursor.execute("insert into core_room (order) values (?)", (int(i),)) 
+1

@Evan : 당신은 분명히 올바른 생각을 가지고 있습니다,하지만이'paramstyle'은'qmark'로 알려져 있습니다. AFAIK는 MySQLdb에서 지원하지 않습니다. – bernie

+0

예, 방금 저의 데모를 빨리 작성했습니다. – slypete