Mysql
 sql >> Base de données >  >> RDS >> Mysql

Échapper aux guillemets pour MySQL en python

Ne pas utiliser le formatage de chaîne pour interpoler les valeurs SQL. Utiliser les paramètres SQL :

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

Ici le %s sont des paramètres SQL ; la base de données s'occupe alors d'échapper les valeurs (transmises comme 2ème argument à `cursor.execute) pour vous.

La syntaxe exacte que vous devez utiliser dépend de votre adaptateur de base de données; certains utilisent %s , d'autres utilisent ? pour les espaces réservés.

Sinon, vous ne pouvez pas utiliser de conteneurs Python, comme une liste, pour ces paramètres. Vous devez d'abord sérialiser cela dans un format de chaîne; vous pouvez utiliser JSON pour cela, mais vous devez également vous rappeler de décoder à nouveau le JSON en une chaîne Python lorsque vous interrogez la base de données. C'est ce que les réponses à l'autre question essayaient de transmettre.

Par exemple, si var4 est la liste, vous pouvez utiliser :

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