sql >> Database >  >> RDS >> Mysql

Ontsnappende aanhalingstekens voor MySQL in python

Doe niet gebruik tekenreeksopmaak om SQL-waarden te interpoleren. Gebruik SQL-parameters:

SQL = 'INSERT INTO test_table (col1, col2, col3, col4) VALUES (%s, %s, %s, %s)'
cursor.execute(SQL, (var1, var2, var3, var4))

Hier de %s zijn SQL-parameters; de database zorgt vervolgens voor het escapen van de waarden (doorgegeven als het 2e argument aan `cursor.execute) voor u.

Welke syntaxis u precies moet gebruiken, hangt af van uw database-adapter; sommigen gebruiken %s , anderen gebruiken ? voor de tijdelijke aanduidingen.

U kunt voor deze parameters geen Python-containers, zoals een lijst, gebruiken. Je zou dat eerst moeten serialiseren naar een string-formaat; je zou daarvoor JSON kunnen gebruiken, maar dan moet je er ook aan denken om de JSON opnieuw te decoderen in een Python-string wanneer je de database opvraagt. Dat is wat de antwoorden op de andere vraag probeerden over te brengen.

Als bijvoorbeeld var4 is de lijst, je zou kunnen gebruiken:

cursor.execute(SQL, (var1, var2, var3, json.dumps(var4)))


  1. MySQL - sluit alle geblokkeerde gebruikers uit van de resultaten

  2. Opgeslagen procedure verhogen incompatibel met sql_mode=only_full_group_by ondanks dat sql_mode leeg is

  3. Snelle MySQL-tip:het DROP USER-commando gebruiken

  4. PHP:mysql v mysqli v pdo