2012-11-22 3 views
1

쿼리를 실행하기위한 Python MySQLdb 래퍼가 있습니다. 이 래퍼를 사용하여 문자열 필드에 '%'기호가 포함 된 쿼리를 실행할 때마다 TypeError가 발생합니다.Python MySQLdb - 쿼리에 '%'를 사용하는 TypeError

class DataBaseConnection: 


    def __init__(self,dbName='default' 

       ): 

     #set   
     dbDtls={}   
     dbDtls=settings.DATABASES[dbName]   
     self.__host=dbDtls['HOST'] 
     self.__user=dbDtls['USER'] 
     self.__passwd=dbDtls['PASSWORD'] 
     self.__db=dbDtls['NAME'] 
     self.dbName=dbName 
    def executeQuery(self, sqlQuery, criteria=1): 
      """ This method is used to Execute the Query and return the result back """ 
      resultset = None 
      try : 
       cursor = connections[self.dbName].cursor() 

       cursor.execute(sqlQuery) 

       if criteria == 1: 
        resultset = cursor.fetchall() 
       elif criteria == 2: 
        resultset = cursor.fetchone() 
       transaction.commit_unless_managed(using=self.dbName) 
       #cursor.execute("COMMIT;") 
       #objCnn.commit() 
       cursor.close() 
       #objCnn.close()  

      except Exception,e: 
       resultset = False 
       objUtil=Utility() 
       error='' 
       error=str(e)+"\nSQL:"+sqlQuery 
       print error 
       objUtil.WriteLog(error) 
       del objUtil 

      return resultset 

sql = """SELECT str_value FROM tbl_lookup WHERE str_key='%'""" 
objDataBaseConnection = DataBaseConnection() 
res = objDataBaseConnection.executeQuery(sql) 
print res 

'%'문자를 이스케이프했지만 작동하지 않았습니다. 데이터베이스 필드는 VARCHAR 필드입니다.

+1

어떻게 탈출 했습니까? '%%'로 두 배로하십시오. – BrenBarn

답변

1

MySQL에 전달할 모든 % 기호를 %%로 이스케이프해야합니다. 그 이유는 백분율 기호는 문자열을 삽입하려는 위치를 나타내는 데 사용되기 때문입니다. 따라서 다음과 같이 할 수 있습니다.

...execute("""SELECT id FROM table WHERE name = '%s'""", name) 

이 값을 이스케이프하여 쿼리에 삽입합니다.

1
execute("""SELECT id FROM table WHERE name = '%s'""", (name));