1

クエリを実行するためのPythonMySQLdbラッパーがあります。このラッパーを使用して文字列フィールドに「%」記号を含むクエリを実行すると、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フィールドです。

4

2 に答える 2

1

MySQLに%%として渡したいすべての%記号をエスケープする必要があります。その理由は、文字列を挿入する場所を示すためにパーセント記号が使用されているためです。したがって、次のようなことができます。

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

変数名に格納されている値はエスケープされ、クエリに挿入されます。

于 2012-11-22T04:41:33.937 に答える