Ne použít formátování řetězce k interpolaci hodnot SQL. Použijte parametry SQL:
SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))
Zde je %s
jsou parametry SQL; databáze se pak postará o escapování hodnot (předaných jako 2. argument do `cursor.execute) za vás.
Přesně to, jakou syntaxi musíte použít, závisí na vašem databázovém adaptéru; někteří používají %s
, ostatní používají ?
pro zástupné symboly.
Pro tyto parametry nelze jinak používat kontejnery Pythonu, jako je seznam. Nejprve byste to museli serializovat do formátu řetězce; můžete k tomu použít JSON, ale pak byste také museli pamatovat na to, abyste při dotazu na databázi znovu dekódovali JSON do řetězce Pythonu. To se snažily sdělit odpovědi na druhou otázku.
Pokud například var4
je seznam, můžete použít:
cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))