2013-03-20 3 views
0

다음과 같이 런타임시 Python 2.6에서 SQL 문을 작성하려고합니다.문자열 형식을 사용하여 얻는 방법 %

SQL = SELECT * FROM table1 where col1 LIKE '%somthing%' 

위의 하나는 데이터베이스 서버에서 정상적으로 실행되고 있지만이 문자열을 파이썬으로 작성하는 동안 문제가 있습니다. 변수를 추가하기 위해 문자열 형식 % s을 사용하고 있습니다.

var = "somthing" 

SQL = "SELECT * FROM table1 where col1 LIKE '%%s%'" % var 

난 당신이 SQL 서식 문자열을 사용하지 않는

Traceback (most recent call last): 
    File "<stdin>", line 8, in <module> 
ValueError: unsupported format character ''' (0x27) at index 247 
+2

str.format 이렇게하지 마 사용할 수 있습니다 - SQL 주입을 찾아보십시오. 그 외에도 이전 스타일 ('%')보다 새로운 스타일 문자열 서식 ('str.format()')을 사용해야합니다. –

+1

@Bibhas : 좋은 일이 파이썬이에요. –

답변

5

아래의 역 추적을 얻을 아래처럼 내 파이썬 코드 모양; SQL 매개 변수를 대신 사용하십시오. 관습 경고로

SQL = "SELECT * FROM table1 where col1 LIKE '%%%s%%'" % var 

필수 XKCD reference :

당신이 %%에 두 배로 %을 피할 수 말했다.

0

또는 당신

SQL = "SELECT * FROM table1 where col1 LIKE '%{}%'".format(var) 
+0

또 다른 메모로서, 이것이 옳은 동안, ** 이렇게하지 마라. ** - SQL 인젝션으로부터 보호하는 방법이있다. 그것들은 당신이 원하는 것이다. 그렇지 않습니다. –

+0

우리는 SQL = "SELECT * FROM table1과 같이"{}}에 0을 추가해야합니다. col1이 '% {0} %' "와 같은 형식이어야합니다. 다른 사람은'ValueError : 형식으로 길이가 0 인 필드 이름을 가져옵니다 ' – Rao

+0

@PBLNarasimhaRao 파이썬 버전에 달려있다. 그러나 당신은 SQL에 문자열 포맷을 사용하지 않습니다. – katrielalex

관련 문제