sql >> Base de Datos >  >> RDS >> Mysql

mysqldb python escapando? o %s?

Para ser más específicos... el cursor.execute() El método toma un argumento opcional que contiene valores para ser citados e interpolados en la plantilla/declaración SQL. Esto NO se hace con un simple % ¡operador! cursor.execute(some_sql, some_params) es NO lo mismo que cursor.execute(some_sql % some_params)

La API DB de Python especifica que cualquier controlador/módulo compatible debe proporcionar un .paramstyle atributo que puede ser cualquiera de 'qmark', 'numeric', 'named', 'format' o 'pyformat' ... de modo que uno podría, en teoría, adaptar sus cadenas de consulta SQL a la forma admitida a través de la introspección y un poco mung. Esto aún debería ser más seguro que tratar de citar e interpolar valores en sus cadenas SQL usted mismo.

Me divirtió particularmente leer Advertencia Nunca, nunca, NUNCA use Python cadena... interpolación... Ni siquiera a punta de pistola. en los documentos de PsicoPG.