2013-06-27 3 views
0

내가 PyMySQLPyMySQL 매개 변수화 쿼리 및 날짜 형식

cur.execute("SELECT %s as label, UNIX_TIMESTAMP(CONVERT(DATE_FORMAT(date_added, '%%Y-%%m-%%d-%%H:%%i:00'),DATETIME)) as time, %s as metric FROM %s WHERE id >= %d GROUP BY label, time", (label, metric, table, min_id,)) 

나는 다음과 같은 오류가 무엇입니까 사용하여 다음 쿼리를 실행하려고 해요 :

TypeError: %d format: a number is required, not str 

라벨, 통계, 테이블, 그리고 min_id은 문자열, 문자열, 문자열 및 int를 각각 나타냅니다.

%를 올바르게 이스케이프 처리하지 않습니까? 꽤 이것을 이해할 수 없으며, 몇 가지 시도를했습니다.

감사합니다.

답변

2

... id >= %d ...... id >= %s ...이어야합니다.

형식 문자열에 적용하기 전에 모든 매개 변수가 이스케이프 처리되어 문자열로 변환됩니다.

+0

하지만 ....하지만 .... whhyyyyy ????? 'select * from users from % d;'을 쿼리로 사용해보십시오! – Tom

+0

아니요, 'cur.execute ('select * from user limit % d '% (10,))', SQL 매개 변수 대신 문자열 형식을 사용하고 ** 잠재적으로 위험한 경우에만 작동합니다. *. – mata

+0

실례지만 SQL 쿼리에 정수를 삽입하는 것은 위험합니까? 그것은'10; 드롭 테이블 사용자,'는 정수입니다. – Tom