IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Passer une liste variable avec pysqlite


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre à l'essai Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Passer une liste variable avec pysqlite
    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...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    En le faisant "à la main", cela devrait s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sql_statement = 'SELECT * FROM chanteurs WHERE name IN (?, ?, ?, ?)'
    connection.execute(sql_statement, 'larousso' , " jojo l'etrangleur" , ' marc' , 'sophie' )
    Si on veut passer à execute une liste de noms, çà devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    noms = [ 'larousso' , " jojo l'etrangleur" , ' marc' , 'sophie' ]
    sql_statement = 'SELECT * FROM chanteurs WHERE name IN (?, ?, ?, ?)'
    connection.execute(sql_statement, *noms)
    Reste à construire sql_statement en fonction de la longueur de la liste noms.
    Qu'en pensez vous?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    merci, wiztricks
    oui effectivement, cette méthode conserve le bénefice des ne pas avoir à me préoccuper de gérer les échappements des guillemets (enfin je pense... je ne me trompes pas n'est-ce pas???).
    Je ne connais pas bien python et cette forme avec un prefix * devant <noms> m'est encore inconnu... je regarde ça tout de suite...
    Bon ma paresse naturelle est légèrement insatisfaite de ne pas pouvoir échapper au travail de création dynamique du (?,?,..) mais bon j'exagère un peu là.
    En tout cas merci pour cette réponse...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.5] ProcStock avec une liste variable d'id en paramètre
    Par hiul dragonfel dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/12/2013, 17h25
  2. Méthode avec un paramètre de type "object" : comment lui passer une List ?
    Par Picsonald dans le forum Windows Communication Foundation
    Réponses: 22
    Dernier message: 19/03/2012, 10h16
  3. Création d'une liste déroulante avec une variable
    Par lou87 dans le forum ASP.NET Ajax
    Réponses: 1
    Dernier message: 12/01/2011, 15h18
  4. [RegEx] Traiter une liste variable avec seul pattern
    Par rv2931 dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2010, 17h48
  5. Réponses: 5
    Dernier message: 13/10/2005, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo