Ok, no tengo tanta experiencia en Python.
Tengo el siguiente código de Python:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
donde var1
es un número entero var2
y var3
son cadenas.
¿Cómo puedo escribir los nombres de las variables sin que Python los incluya como parte del texto de la consulta?
%
. De hecho, lo digo en la respuesta.%
lugar de,
entre la cadena y las variables ... no puedo deshacer mi voto en contra debido a varias razones ... personalmente me gustaría ver palabras como inseguro / ataque, etc.en la descripción donde dices don 't use%
..%
operador para formatear la cadena. Los que están%
en la cadena están siendo utilizadoscursor.execute
directamente y, dado que sabe que está generando SQL, puede hacer más para protegerlo.Se permiten diferentes implementaciones de Python DB-API para usar diferentes marcadores de posición, por lo que deberá averiguar cuál está usando, podría ser (por ejemplo, con MySQLdb):
o (por ejemplo, con sqlite3 de la biblioteca estándar de Python):
u otros aún (después de
VALUES
que podría tener(:1, :2, :3)
, o "estilos con nombre"(:fee, :fie, :fo)
o(%(fee)s, %(fie)s, %(fo)s)
donde pasa un dict en lugar de un mapa como segundo argumentoexecute
). Verifique laparamstyle
constante de cadena en el módulo DB API que está utilizando y busque paramstyle en http://www.python.org/dev/peps/pep-0249/ para ver cuáles son todos los estilos de paso de parámetros.fuente
Muchas maneras. NO use el más obvio (
%s
con%
) en código real, está abierto a ataques .Aquí copiar y pegar desde pydoc de sqlite3 :
Más ejemplos si lo necesita:
fuente
http://www.amk.ca/python/writing/DB-API.html
Tenga cuidado cuando simplemente agregue valores de variables a sus declaraciones: Imagine un usuario nombrándose a sí mismo
';DROP TABLE Users;'
- Es por eso que necesita usar el escape sql, que Python le proporciona cuando usa el cursor.execute de manera decente. Ejemplo en la URL es:fuente