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:
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)
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= ?'
connection.execute(sql_statement,nom)
parce que ca rend mon code moins sensible aux injection SQL des méchants.
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:

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)
qui bien sur ne marche pas. En gros je voudrais qu'il (pyhton) remplace le < ? > par une liste ('larousso' , ' jojo l\'etrangleur' , 'marc' , ' sophie' )

mais est-ce possible ?

Merci a tous...