sql >> Databasteknik >  >> RDS >> Mysql

Vilken är den bästa flyktkaraktärsstrategin för Python/MySQL-kombo?

Här är ett exempel:

import MySQLdb
column = str(MySQLdb.escape_string(row[1]))
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
cursor2.execute(query, [row[3], row[0]])

Uppdatera

Här är en kort kommentar:

column = str(MySQLdb.escape_string(row[1]))

Alltid en bra idé att undvika allt som ingår i en fråga. I det här fallet lägger vi dynamiskt till ett kolumnnamn och därför måste det escapes innan frågan exekveras.

query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 

Jag formar frågan här. Jag försöker uppnå två saker:(1) skapa en fråga med kolumnnamnet ifyllt med column variabel som deklarerats på föregående rad (2) lägg till platshållare som kommer att fyllas i av faktiska parametrar under exekveringen av frågan.

Kodavsnittet dict(column = column) är faktiskt ett annat sätt att skapa ordboken {'column': column} . Detta görs möjligt med hjälp av dict konstruktör. Jag vill inte fylla i de andra platshållarna ännu så jag undviker dem med två procenttecken (%% ).

cursor2.execute(query, [row[3], row[0]])

Kör slutligen frågan. Om du skriver ut frågan innan den körs kommer du att se strängen update myTable set column_name = %s where ID = %s .



  1. Ändra mysql-lösenord i Docker-behållaren

  2. SQLite JSON_OBJECT()

  3. åtkomst nekad för att ladda data i MySQL

  4. Importera Excel-data till relationstabeller på MySQL