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 :

passage de variable dans une requete sql like


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 31
    Points : 30
    Points
    30
    Par défaut passage de variable dans une requete sql like
    bonjour,

    je dévellope actuellement un plugin Qgis pour un proget de stage, et je bloque sur une requete SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def cbxProprioChange(self, text):
            print "recherche en cours " + text
            db = sqlite3.connect(os.path.join(os.path.dirname(__file__),'data.sqlite'))
            cursor = db.cursor()
            cursor.execute("SELECT nom FROM proprietaire where nom like '%?%'",text)
            for row in cursor.fetchall():
                print(row[0])
    le but de la requete est de récupérer ce que tape l'utilisateur dans la combobox, et d'interroger la base de donné achaque nouvelle entrée (une auto-complétion quoi )
    la requete passe tres bien si je tape directement une recherche dans le code, mais quand je veux mettre ma variable, rien ne va plus!

    le message d'erreur que ca m'affiche est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Traceback (most recent call last):
      File "/home/rep/.qgis2/python/plugins/test/test.py", line 78, in cbxProprioChange
        cursor.execute("SELECT nom FROM proprietaire where nom like '%?%'",text)
    ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.
    cela fait deux jours que je cherche, je suis a court d'idée. des suggestions?

    merci d'avance

  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,
    J'écrirai plutôt cela ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         cursor.execute("SELECT nom FROM proprietaire where nom like ?", ('%' + text + '%', ))
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 31
    Points : 30
    Points
    30
    Par défaut
    nickel, ca marche!
    merci beaucoup de ta réponse rapide, ca va me permettre d'avancer!

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 31
    Points : 30
    Points
    30
    Par défaut
    nouveau probleme en vue, la gestion des accent...
    savez-vous s'il existe une fonction déja existante permettant de ne pas en tenir compte?
    un équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.dlg.cbxProprio.setAutoCompletionCaseSensitivity (Qt.CaseInsensitive)
    mais pour les accent?

  5. #5
    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,

    C'est le SGDB qui fera les comparaisons.
    Il n'y a pas grand chose à faire côté "programmation".
    Sur un SGDB normal, çà dépend de la "collation" définie sur la base de donnée (ou de celle qu'on va donner en paramètre à la requête, mais je ne sais pas si c'est standardisé côté SQL).

    Avec SQLite, le support de cela est assez limité.
    Sauf à dupliquer les colonnes (une avec accent, l'autre sans), il sera plus simple de changer de SGDB.

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

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    S'il s'agit de changer l'ordre du tri demandé par "ORDER BY", on peut créer une fonction de comparaison python et la déclarer à sqlite avec create_collation("comp", comp). On l'utilise ensuite comme: "... ORDER BY x COLLATE comp". J'utilise cela pour faire des tris selon le dictionnaire français.

    S'il s'agit d'autre chose, on peut créer une fonction Python et la déclarer à sqlite avec create_function(...). On peut l'utiliser ensuite pour traiter n'importe quelles données directement dans le script SQL. J'utilise cela pour faire, entre autres, des recherches de mots similaires avec ratios de similitude.

    Voilà une fonction écrite en Python 2.x qui supprime les accents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import unicodedata
     
    def sans_accent(ch, decod='utf-8'):
        """supprime les accents de la chaine ch (unicode) """
        # au cas où ch ne serait pas en unicode:
        if isinstance(ch, str):
            ch = unicode(ch, decod, errors='replace')
        # suppression des accents
        chnorm = unicodedata.normalize('NFKD', ch)
        return u"".join([c for c in chnorm if not unicodedata.combining(c)])
     
    print sans_accent("abcéèçàùôï")
    abceecauoi
    Il y a des exemples simples présentés dans la doc: https://docs.python.org/2/library/sq...module-sqlite3.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/01/2014, 00h51
  2. Problème variable dans une requete SQL
    Par SimonAFDT dans le forum PL/SQL
    Réponses: 13
    Dernier message: 30/11/2009, 12h25
  3. Utililiser une variable dans une requete SQL
    Par le_misterioso dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2009, 11h31
  4. BO 5.1 Champ variable dans une requete SQL
    Par Sergio63 dans le forum Deski
    Réponses: 1
    Dernier message: 21/05/2007, 11h45
  5. utilisation d'une variable dans une requete SQL
    Par ezneti dans le forum Visual C++
    Réponses: 1
    Dernier message: 30/04/2007, 09h47

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