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

Python Discussion :

requête sqlite3 select


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 12
    Points
    12
    Par défaut requête sqlite3 select
    bonjour,

    Je dispose d'une base de données qui contient la table "info" par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    réf ,  numero, groupe, sexe, âge, main
    u'11A', u'11', u'A', u'male', u'21', u'right-hander')
    (u'15D', u'15', u'D', u'female', u'50', u'right-hander')
    Lorsque j'utilise la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * from info where numero = %s" %value
    (value = "11") ==> ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * from info where sexe = %s" %value
    (value = "male") ==> ça fonctionne

    mais lorsque j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select * from info where réf = %s" %value"
    (value = "11A") ==> j'obtiens l'erreur suivante : unrecognized token: "11A"

    Je ne sais plus quoi faire ... avez vous une idée SVP ?

    Merci par avance pour vos réponses.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut

    "select * from info where numero = %s" % value, construit la requête SQL qui sera être exécutée par SQlite.

    Le "%s" transformera en suite de caractères le paramètre passé dans "value".
    Charge à l’interpréteur de la commande (Sqlite) d'y retrouver le String, Int, Date,... attendu par le type des colonnes de la table info.

    Par défaut, un string devra être entre quotes et un nombre "sans".
    Voir n'importe quel tuto SQL "basique".

    On devrait donc écrire:
    • "select * from info where sexe = '%s'" % value
    • "select * from info where numero = %s" % value

    et donc:
    • "select * from info where réf = '%s'" % value"

    => sqlite aurait du raler de recevoir une chaine de caractères sans quote.
    Il essaie de rattraper le coup en supposant:
    • 11: commence par un nombre
    • male: commence par un caractères dans a-zA-Z, essayons string

    Avec 11A cette heuristique ne fonctionne plus et çà râle!

    Vous avez certainement lu la documentation Python sur sqlite.
    Il y est écrit:
    Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see http://xkcd.com/327/ for humorous example of what can go wrong).
    Dit autrement, oubliez les explications que je vous ai donné pour faire marcher votre code: construire ses requêtes SQL de cette façon n'est pas une bonne habitude à prendre.

    Prenez le temps d'apprendre à utiliser proprement l'API Sqlite chez D.Hellmann par exemple.

    Cordialement,

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Je te remercie pour tes explications et le lien de D. HELLMANN que je ne connaissais pas.

    Je t'avoue que j'ai peu de temps pour réalisé une application, alors j'essaye lorsque je lis plusieurs fois la même info je ne vais pas chercher midi à 14h.

    Merci bien

Discussions similaires

  1. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  2. Exécution tres Long d'une requête de Selection
    Par touhami dans le forum SQL
    Réponses: 10
    Dernier message: 09/03/2006, 09h34
  3. Ouvrire requête de selection en VBA ..
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 15h55
  4. requête avec SELECT imbriqués...
    Par dj_lil dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/07/2005, 11h21
  5. [requête] DELETE + SELECT
    Par doohan dans le forum Requêtes
    Réponses: 6
    Dernier message: 07/07/2003, 12h27

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