"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Ao usar SQLite3 em Python, por que \"Número incorreto de ligações fornecidas\" ao utilizar \"?\" Substituição de parâmetro?

Ao usar SQLite3 em Python, por que \"Número incorreto de ligações fornecidas\" ao utilizar \"?\" Substituição de parâmetro?

Publicado em 2024-11-07
Navegar:979

When Using SQLite3 in Python, Why \

Conundrum de substituição de parâmetros SQLite

Em uma tentativa de se proteger contra injeções de SQL, um desenvolvedor encontrou um erro ao utilizar SQLite3 com Python 2.5. Ao empregar o "?" recomendado substituição de parâmetros para evitar injeções, eles enfrentaram o seguinte dilema:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.

Esse problema parece decorrer da criação inicial do banco de dados, que continha oito ligações. No entanto, usar a substituição "%s" menos segura para cada nome de item resolveu o problema.

for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
    self.cursor.close()

A solução para essa perplexidade está em entender que o método Cursor.execute() requer uma sequência como seu segundo parâmetro. Nesse caso, o desenvolvedor estava fornecendo uma string com oito caracteres. Para corrigir isso, a seguinte modificação de código deve ser implementada:

self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])

Em conformidade com este parâmetro especificação, o problema pode ser resolvido de forma eficaz, permitindo a recuperação segura e eficiente de dados do SQLite3.

Declaração de lançamento Este artigo foi reimpresso em: 1729322955 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3