Maison > Questions et réponses > le corps du texte
P粉4349968452023-08-23 15:50:40
Bien que cette question soit ancienne, je voulais laisser une réponse au cas où quelqu'un d'autre chercherait également ce que je recherche
La réponse acceptée devient confuse lorsque nous avons beaucoup de paramètres ou que nous souhaitons utiliser des paramètres nommés
Après quelques tentatives
ids = [5, 3, ...] # id列表 cursor.execute(''' SELECT ... WHERE id IN %(ids)s AND created_at > %(start_dt)s ''', { 'ids': tuple(ids), 'start_dt': '2019-10-31 00:00:00' })
Testé et réussi sous python2.7
和pymysql==0.7.11
P粉2121146612023-08-23 00:26:09
Utiliser directementlist_of_ids
:
format_strings = ','.join(['%s'] * len(list_of_ids)) cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings, tuple(list_of_ids))
De cette façon, vous pouvez éviter de vous citer et éviter divers problèmes d'injection SQL.
Notez que les données (list_of_ids
) sont transmises directement au pilote MySQL en tant que paramètres (pas dans le texte de la requête), il n'y a donc pas de problèmes d'injection. Vous pouvez conserver tous les caractères de la chaîne sans les supprimer ni les citer.