Cuidado ao usar interpolação de string para consultas SQL, pois ela não escapará dos parâmetros de entrada corretamente e deixará seu aplicativo aberto a vulnerabilidades de injeção de SQL. A diferença pode parecer trivial, mas na realidade é enorme .
Incorreto (com problemas de segurança)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Correto (com escape)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Isso aumenta a confusão de que os modificadores usados para vincular parâmetros em uma instrução SQL variam entre diferentes implementações de API de banco de dados e que a biblioteca cliente mysql usa
printf
sintaxe de estilo em vez do mais comumente aceito '?' marcador (usado, por exemplo, python-sqlite
).