2014-12-08 2 views
1

작동하지 PARAMS :torndb (MySQLdb) 쿼리는 다음과 같이

In [43]: conn.query('select %s from topic order by %s limit 2', 'id', 'id desc') 
Out[43]: [{'id': u'id'}, {'id': u'id'}] 
In [44]: conn.query('select id from topic order by id desc limit 2') 
Out[44]: [{'id': 10L}, {'id': 9L}] 

결과가 동일하지 않은 이유는 무엇입니까?

답변

1

이는 MySQLdb 드라이버가 쿼리 매개 변수를 쿼리에 삽입하는 방식 때문입니다.

첫 번째 쿼리는 실제로 (따옴표를 시청)로 변환된다 : 여기

select 'id' from topic order by 'id desc' limit 2 

'id'

문자열이 아닌 열 이름입니다.

+0

감사합니다.이를 수정하고 올바른 결과를 얻는 방법은 무엇입니까? – Wee

+0

@ 글쎄, 한 가지 옵션은 문자열 서식을 사용하는 것이지만 권장하지는 않습니다. 이 경우에는 column name과 order by 절에 대한 소스를 정말로 신뢰해야한다. 'conn.query ('% s '% ('id ','id desc '))'에 의한 주제 순서에서 % s 선택. – alecxe

+0

네, 맞습니다,'% s'은 변수에 의해서만 사용자가 될 수 있습니다 – Wee