Ok, então não tenho tanta experiência em Python.
Eu tenho o seguinte código Python:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
onde var1
é um inteiro var2
e var3
são strings.
Como posso escrever os nomes das variáveis sem python incluindo-os como parte do texto da consulta?
%
. Na verdade, digo isso na resposta.%
vez de,
entre a string e variáveis .. não posso desfazer meu voto para baixo devido a vários motivos .. Eu pessoalmente gostaria de ver palavras como inseguro / ataque etc mencionadas na descrição onde você diz don 't use%
..%
operador para formatar a string. Aqueles%
na string estão sendo usadoscursor.execute
diretamente pelo e, como ele sabe que está gerando SQL, pode fazer mais para protegê-lo.Diferentes implementações da Python DB-API podem usar diferentes marcadores de posição, portanto, você precisará descobrir qual está usando - pode ser (por exemplo, com MySQLdb):
ou (por exemplo, com sqlite3 da biblioteca padrão do Python):
ou outros ainda (depois de
VALUES
você ter(:1, :2, :3)
, ou "estilos nomeados"(:fee, :fie, :fo)
ou(%(fee)s, %(fie)s, %(fo)s)
onde você passa um dict em vez de um mapa como o segundo argumentoexecute
). Verifique aparamstyle
constante de string no módulo da API do banco de dados que você está usando e procure por paramstyle em http://www.python.org/dev/peps/pep-0249/ para ver o que são todos os estilos de passagem de parâmetro!fonte
Várias maneiras. NÃO use o mais óbvio (
%s
com%
) no código real, ele está aberto a ataques .Aqui copie e cole do pydoc do sqlite3 :
Mais exemplos se você precisar:
fonte
http://www.amk.ca/python/writing/DB-API.html
Tenha cuidado ao simplesmente anexar valores de variáveis às suas instruções: Imagine um usuário nomeando a si mesmo
';DROP TABLE Users;'
- É por isso que você precisa usar o escape sql, que o Python fornece quando você usa o cursor.execute de maneira decente. O exemplo no url é:fonte