Ok, no tengo tanta experiencia en Python.
Tengo el siguiente código de Python:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
donde var1es un número entero var2y var3son 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.executedirectamente 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
VALUESque 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 laparamstyleconstante 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 (
%scon%) 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