2013-06-13 9 views
1

나는이 구문을 파이썬 mysql에서 큰 성공을 거두고 사용 해왔다.파이썬 mysql 문자열 대체가 작동하지 않는다.

search = "O'%" # find names like O'Brien or O'Connell... 

cursor.execute (""" 
    select userid 
     from usertab 
    where name like %s 
""" , (search)) 

는하지만 가끔은 내가 다음처럼 실행하기 전에 내 SQL 문자열을 구축 할 필요가 있지만, 대체 기술은 상기 이외 다른 모든 경우에 작동하지 않습니다.

search = "O'%" # find names like O'Brien or O'Connell... 

sql = """ 
    select userid 
     from usertab 
    where name like '%s' 
""" % (search) 

cursor.execute(sql) 

첫 번째 예에서 커서를 실행하지 않고도 동일한 종류의 문자열 대체를 수행하려면 어떻게해야합니까?

답변

2

MySQLdbusesescape 인수에 대한 연결의 literal() 방법은, 당신이 사용할 수 있도록 : 작동

sql = """ 
    select userid 
     from usertab 
    where name like %s 
""" % cursor.connection.literal(search) 
+0

... 나는 다른 사람이 제안 모른 무슨 볼 일이에 앉아 싶어 ... 내가 ' 다른 사람들이 같은 문제에 어떻게 접근하는지 궁금해. – panofish

+0

몇 가지 대체품이있을 때이 솔루션은 번거로워집니다. – panofish

+0

몇 가지 대체품이란 무엇을 의미합니까? 당신은 하나의 튜플을 넘겨 줄 수 있고, 각 요소는 개별적으로 이스케이프됩니다 :'select ... a = % s와 b = % s 그리고 ... "% literal ((a, b, ...))' – mata