Bonjour a tous,
J'ai commencé un projet utilisant pysqlite recemment. En lisant la documentation de cette bibliothèque, je suis tombé sur un truc me disant qu'il ne FALLAIT surtout pas passer des requetes SQL construites directement via python, mais plutôt utiliser la forme avec placeholder de la methode execute ou executemany.
Donc, en gros plutot que de faire:
il faut faire (c'est mieux)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 nom = 'larousso' sql_statement = 'SELECT * FROM chanteurs WHERE name= ' + nom connection.execute(sql_statement)
parce que ca rend mon code moins sensible aux injection SQL des méchants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 nom = 'larousso' sql_statement = 'SELECT * FROM chanteurs WHERE name= ?' connection.execute(sql_statement,nom)
Certe, ca me parait logique. Je suppose que ça me permet d'éviter d'avoir à remplacer tous les ' ou les " de 'nom' (genre dans jojo l'etrangleur) par un \' ou un truc du genre.
Soit.
Maintenant si je veux utiliser ce code pour faire une recherche dans un liste,
il me faudrait un truc du genre:
qui bien sur ne marche pas. En gros je voudrais qu'il (pyhton) remplace le < ? > par une liste ('larousso' , ' jojo l\'etrangleur' , 'marc' , ' sophie' )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 noms = ( 'larousso' , " jojo l'etrangleur" , ' marc' , 'sophie' ) sql_statement = 'SELECT * FROM chanteurs WHERE name IN (?)' connection.execute(sql_statement,noms)
mais est-ce possible ?
Merci a tous...
Partager