não use a formatação de string para interpolar valores SQL. Use parâmetros SQL:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Aqui o
%s
são parâmetros SQL; o banco de dados então cuida de escapar os valores (passados como o segundo argumento para `cursor.execute) para você. Exatamente qual sintaxe você precisa usar depende do seu adaptador de banco de dados; alguns usam
%s
, outros usam ?
para os marcadores. Caso contrário, você não pode usar contêineres Python, como uma lista, para esses parâmetros. Você teria que serializar isso para um formato de string primeiro; você poderia usar JSON para isso, mas também teria que se lembrar de decodificar o JSON em uma string Python novamente quando consultar o banco de dados. Isso é o que as respostas para a outra pergunta tentaram transmitir.
Por exemplo, se
var4
é a lista, você pode usar:cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))