2016-08-10 3 views
1

tablename을 원시 sql로 보간하려고 시도하지만 잘못된 형식의 문자열을 보간하여 SQL 쿼리가 실패합니다.Django raw sql 형식 tablename

from django.db import connection 
cursor = connection.cursor() 
cursor.execute("SELECT * from %s;", ['product']) 

예외 : 나는 SQL 쿼리 properyly에 문자열을 보간의 적절한 방법을 찾을 수 없습니다

django.db.utils.ProgrammingError: syntax error at or near "'product'" 
LINE 1: SELECT * from 'product'; 

답변

4

당신은 매개 변수 인수로 테이블이나 컬럼 이름을 전달할 수 없습니다. SQL-injection 공격의 가능성을 염두하면서

qry = "SELECT * from %s;" % 'product' 
cursor.execute(qry) 

대신 그런 짓을.

+1

아쉽습니다. 그리고 기록을 위해서 쿼리는'% s from % s'입니다. 그래서 그것은 2 단계로 보간되어야합니다 :'qry % ('% s', 'product')' – PepperoniPizza

+0

아 좋아요. 네,'선택 *'을 원하지 않는다고 생각합니다. – bernie