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 :

Recherche avancée de données dans une base de donnée SQLite3 [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut Recherche avancée de données dans une base de donnée SQLite3
    Bonjour,

    Je suis tout nouveau sur le forum ainsi qu'en programmation. Je suis en train de coder un logiciel qui permet une gestion de stock. J'ai une base de donnée SQLite3 et elle est affichée sur un Treeview.
    Mon problème concerne la partie recherche de référence. J'ai réussi à coder le principe de base de la recherche et cela fonctionne très bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    # Method Search reference
    def Searchref():
        selected = searchDrop.get()
        if selected == "Search by...":
            messagebox.showinfo("Error", "You must choose a type (PN, Shelf, Description, etc...")
        if selected == "Description":
            for x in tree.get_children():
                tree.delete(x)
            description = searchEntry.get()
            conn = sqlite3.connect('data/database.db')
            cursor = conn.cursor()
            select = cursor.execute("SELECT*FROM SIGO_Stock where description = ?", (description,))
            conn.commit()
            for row in select:
                tree.insert('', END, values=row)
            conn.close()
        if selected == "Part Number":
            for x in tree.get_children():
                tree.delete(x)
            partnumber = searchEntry.get()
            conn = sqlite3.connect('data/database.db')
            cursor = conn.cursor()
            select = cursor.execute("SELECT*FROM SIGO_Stock where partnumber = ?", (partnumber,))
            conn.commit()
            for row in select:
                tree.insert('', END, values=row)
            conn.close()
        if selected == "Serial Number":
            for x in tree.get_children():
                tree.delete(x)
            serialnumber = searchEntry.get()
            conn = sqlite3.connect('data/database.db')
            cursor = conn.cursor()
            select = cursor.execute("SELECT*FROM SIGO_Stock where serialnumber = ?", (serilanumber,))
            conn.commit()
            for row in select:
                tree.insert('', END, values=row)
            conn.close()
        if selected == "Shelf":
            for x in tree.get_children():
                tree.delete(x)
            shelf = searchEntry.get()
            conn = sqlite3.connect('data/database.db')
            cursor = conn.cursor()
            select = cursor.execute("SELECT*FROM SIGO_Stock where shelf = ?", (shelf,))
            conn.commit()
            for row in select:
                tree.insert('', END, values=row)
            conn.close()
        searchEntry.delete(0, 'end')
    Si je tape la description "Lamp" il affiche toute les references avec le nom "Lamp". Cependant j'aimerai pouvoir faire une recherche qu'avec un nom ou un numéro de référence incomplet, voir même qu'une seule lettre. Et aussi que la recherche ne prend pas en compte les majuscules.
    J'ai chercher partout ou je pouvais dû à mes connaissance limitées. Je viens donc vers vous pour de l'aide.

    Merci d'avance pour vos réponses.

    Fred.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Si la recherche est sur des chaines de caractères de la base de données, vous pouvez regarder comment utiliser LIKE.

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

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    Merci pour ta réponse rapide. En effet plein de chose intéressante sur ce lien.

    J'ai essayé ça mais ç ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select = cursor.execute("SELECT*FROM SIGO_Stock WHERE description LIKE '%' "), (description,)
    Je n'ai pas d'erreur de code mais il m'affiche des truc bizarre sur mon treeview
    Nom : Sans titre.png
Affichages : 633
Taille : 4,4 Ko

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Avec Python vous avez fait vos requêtes genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT*FROM SIGO_Stock where shelf = ?", (shelf,))
    Le '?' donnant l'emplacement où coller le contenu de la variable shelf passée dans le tuple en paramètre.

    Avec LIKE, il n'y a pas de raison pour que la "syntaxe" soit différente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM SIGO_Stock WHERE description LIKE ?"
    C'est éventuellement dans le paramètre qu'on va coller le '%'.

    Sinon cherchez un peu sur Internet, il y a certainement des exemples d'utilisation de LIKE avec python et sqlite3.

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

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2020
    Messages : 40
    Par défaut
    Bon après des heures de recherche sur internet je n'avais rien trouvé à part le fait de mettre % dans un des paramètres ou après LIKE cependant en le mettant après LIKE j'avais une erreur de syntaxe. J'ai fini par comprendre que le '%' fallait le mettre dans une autre variable puis l'appeler via une requête. Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            for x in tree.get_children():
                tree.delete(x)
            description = searchEntry.get()
            conn = sqlite3.connect('data/database.db')
            cursor = conn.cursor()
            SQL = 'SELECT * FROM SIGO_Stock WHERE description LIKE ?'
            wc_description = "%{}%".format(description)
            select = cursor.execute(SQL, (wc_description,))
            conn.commit()
            for row in select:
                tree.insert('', END, values=row)
            conn.close()
    et tout fonctionne correctement !! je peux chercher n'importe quel mot commençant, ayant ou finissant par les lettres ou chiffres inscrits dans "l'Entry".

    j'ai donc remplacé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select = cursor.execute("SELECT*FROM SIGO_Stock where description = ?", (description,))
    par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL = 'SELECT * FROM SIGO_Stock WHERE description LIKE ?'
            wc_description = "%{}%".format(description)
            select = cursor.execute(SQL, (wc_description,))
    Voila ! merci Wiztricks pour ton aide.

    PS : serait-il possible de créer un repertoire dans le forum Python concernant les questions ou problèmes liés aux liaisons de bas de donnée svp ? Je n'avais rien trouvé

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

Discussions similaires

  1. [XL-2016] Recherche exemple d'enregistrement dans une base de données access
    Par tophe45300 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/02/2019, 14h55
  2. [XL-2013] Recherche de plusieurs conditions dans une base de données
    Par AlbaGo dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/10/2018, 13h16
  3. Recherche par mot clé dans une base de donnée
    Par sihamsisim dans le forum ASP
    Réponses: 1
    Dernier message: 24/04/2008, 20h59
  4. Recherche d'un champ dans une base
    Par vanou dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2006, 10h31
  5. ASp - recherche d'un champs dans une base.
    Par kmayoyota dans le forum ASP
    Réponses: 5
    Dernier message: 03/12/2004, 15h03

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