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 :

Formulation en Python d'une requète SQLite : problème mystérieux.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Formulation en Python d'une requète SQLite : problème mystérieux.
    Bonjour à tous.

    Je suis complètement novice en Python, mais je fais faire le plus gros du travail par ChatGPT, et, jusqu'à maintenant, ça a plutôt bien marché, mais là nous butons tous les deux sur un point de blocage.

    J'ai extrait de mon code complet ces quelques dizaines de lignes pour faire un programme de test :
    Code Python : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sqlite3
    import os
    import time
    from os import system
    from time import sleep
    import datetime
    try:
        conn = sqlite3.connect('SQLite3/Esperance.db')
    # Creation d'un objet curseur
        cursor = conn.cursor()
        T_Ext = 0
        while T_Ext < 2:
            T_Amb = 0
            while T_Amb < 3:
                Prog = 0
                while Prog < 3:
                    Heure = 0
                    while Heure < 2:
                        Etat = 0
                        while Etat < 2:
                            valeurs=('T_Ext','T_Amb','Prog','Heure','Etat')
                        # Recherche de l'ordre à donner dans la table Ordres
                            requete=(
                                "SELECT Ordre FROM Ordres "
                                "WHERE T_Ext = ? "
                                "AND T_Amb =? "    
                                "AND Prog =? "    
                                "AND Heure =? "   
                                "AND Etat =?"
                             )
                            sql_query = (requete % valeurs)
                            with open("espion1.txt", 'a') as espion:
                                espion.write("Requête SQL : ",sql_query)
                            cursor.execute(requete, valeurs)
                            Ordre=cursor.fetchone()
                            ordre1 = str(Ordre[0]) if Ordre else "x"
                            # Formatage de la chaîne de sortie
                            output_string = (
                                f"T_Ext = {T_Ext:d}, "
                                f"T_Amb = {T_Amb:d}, "
                                f"Prog = {Prog:d}, "
                                f"Heure = {Heure:d}, "
                                f"Etat = {Etat:d}, "
                                f"Requête SQL = {sql_query} : "
                                f"Ordre = {ordre1:s}\n"
                            )
     
     
                            with open("espion1.txt", 'a') as espion:
                                espion.write(output_string)
                            Etat = Etat+1
                        Heure=Heure+1
                    Prog=Prog+1
                T_Amb=T_Amb+1
            T_Ext=T_Ext+1
    # Terminer et fermer la connexion
        conn.commit()
    except sqlite3.Error as e:
        print(e)
    #    with open("temperature.txt", 'a') as fichier:
    #        fichier.write ("Erreur SQLite3 : " + e + "\n")
    finally: 
        if conn:
            conn.close()
    Et voici le message d'erreur :
    Traceback (most recent call last):
    File "/home/yves/Testordres1.py", line 33, in <module>
    sql_query = (requete % valeurs)
    TypeError: not all arguments converted during string formatting
    Voir ligne 33 dans le code.
    J'ai tenté de commenter une par une les lignes du select, mais ça n'y change rien.
    J'ai vérifié dix fois que les variables étaient bien des entiers, tel que déclaré dans la base (vérifié dix fois aussi). ChatGPT n'a repéré aucune erreur dans mon code (ou plutôt, il me les a toutes fait corriger) mais il n'y a rien à faire.

    Merci a qui voudra bien se plonger là dedans ( c'est un peu long, mais Python est un peu verbeux...)

    AMIcalement.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Je vais essayer d'ignorer la partie chatGPT, car une condition pour l'utiliser en programmation, est de connaître un minimum les bases du langage sur lequel vous allez travailler...

    EDIT : C'est un SELECT, mal observé !

    À quoi ressemble votre table Ordres ?

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

    Si on écrit requete % valeurs, c'est dans l'intention de remplacer un placeholder (ici "?") dans requête avec un item du tuple valeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 'a ? b ?' % ('c', 'd')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: not all arguments converted during string formatting
    L'intention est matérialisée par le % qui est bien connu par les programmeurs C (et Python) mais dans ce cas le "placeholder" est "%s" et npn "?":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> 'a %s b %s' % ('c', 'd')
    'a c b d'
    Mais le '?' est aussi placeholder pour sqlite avec python, mais c'est pas % qui fait le job mais execute i.e. cursor.execute(requete, valeurs) devrait fonctionner.
    Pour faire fonctionner votre code, un habile replace de ? par %s devrait le faire.

    Je suis complètement novice en Python, mais je fais faire le plus gros du travail par ChatGPT,
    Cool... Sur une bagnole conduite par une IA, le conducteur reste responsable... et donc doit avoir son permis de conduire. Après vous faites un peu ce que vous voulez: ça ne tuera personne... mais il faut pas venir pleurer ensuite parce que vous ne comprenez pas ce que vous n'avez jamais cherché à comprendre. (D'autant qu'en poussant la porte pour entrer ici, vous êtes supposé savoir qu'il faut s'être un peu formé avant de demander de l'aide).

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

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Merci de vos aides. J'entends bien vos critiques, et je ne suis pas prêt de me mettre au volant d'une voiture pilotée par "IA".

    Je suis novice ne Python, mais je ne crois pas être ne mesure de lister tous les langages que j'ai utilisé pour programmé dans ma vie sans en oublier, mais laissons cela de côté.

    J'ai modifié mon programme d'après ce que j'ai compris de vos réponses, et voici le résultat :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                            valeurs=('T_Ext','T_Amb','Prog','Heure','Etat')
                        # Recherche de l'ordre à donner dans la table Ordres
                            requete=(
                                "SELECT Ordre FROM Ordres "
                                "WHERE T_Ext = %s "
                                "AND T_Amb = %s "
                                "AND Prog = %s "
                                "AND Heure = %s? "
                                "AND Etat = %s?"
                             )
                            sql_query = requete % (valeurs)
    Malheureusement, Python n'est pas toujours très bavard... A vot' bon cœur...

    AMIcalement.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    Malheureusement, Python n'est pas toujours très bavard...
    Le code que vous montrez fonctionne sans erreur chez moi.

    Citation Envoyé par L'AMI Yves Voir le message
    mais je ne crois pas être ne mesure de lister tous les langages que j'ai utilisé pour programmé dans ma vie sans en oublier, mais laissons cela de côté.
    Aujourd'hui, c'est python qu'il vous faut maîtriser... et les langages que je pratiquais dans les années 70s ne me sont d'aucune aide.

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

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Vous avez vu la onzième ligne de mon post ? Je suppose que c'est celle-là qui est la cause de l'erreur.

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Tant mieux, du coup sql_query sert à quoi ?

    EDIT : Il existe un bouton Résolu

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Dans ma première réponse, j'indiquais:

    Citation Envoyé par wiztricks Voir le message
    Pour faire fonctionner votre code, un habile replace de ? par %s devrait le faire.
    Cela permet de passer de l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 'a ? b ?' % ('c', 'd')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: not all arguments converted during string formatting
    à la construction de la chaine de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> 'a ? b ?'.replace('?', '%s') % ('c', 'd')
    'a c b d'
    en gardant les '?' comme placeholder de la requête sqlite qui vient après.

    - W

    PS: Et si, in fine, python est content mais que ça ne fait pas ce que vous voulez, c'est que vous avez un soucis de conception: comment reformuler ce que vous cherchez à faire pour que ce soit programmable avec python? C'est un autre sujet et d'autres forums.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    @fred1599 Pour ce que j'ai compris de Python (par l'intermédiaire de ChatGPT, mais je ne le tiens pas pour infaillible, je m'en suis aperçu plusieurs fois), votre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sqlite3
     
    connection = sqlite3.connect('SQLite3/Esperance.db')
    cursor = connection.cursor()
     
    values = (0, 1, 1)
    result = cursor.execute("SELECT Ordre FROM Ordres WHERE T_ext = ? AND Prog = ? AND Heure = ?", values)
    print(result.fetchone()[0])
    a toutes les chances de fonctionner, mais ne s'applique pas (me semble-t-il) pour faire ce que je veux : il s'agit bel et bien d'interroger ma table à partir des valeurs de variables, pas de constantes.

    Je veux bien que chapGPT m'ait dit des carabistouilles, mais le but auquel j'aspire, c'est que SQLite me dise quel est le contenu de ma table pour les valeurs qui sont dans mes variables (et qui viennent de tout à fait ailleurs), ou qu'il n'y a pas de réponse pour ces valeurs là, dans ma table. Je ne vois pas quel intérêt il pourrait y avoir pour mon projet à interroger ma tables avec des constantes, et non pas tel ou tel jeu de constantes.

    Estimez-vous, l'un ou l'autre, que la solution proposée par ChatGPT n'est pas bonne ? Mais alors, quelle est la bonne. Je reconnais que je n'ai pas une compétence suffisante en Python pour répondre moi-même, et pas d'autre compétence que de tester si les solutions qu'on me propose fonctionnent.


    Et accessoirement, je n'apprécie pas beaucoup qu'on ait l'air de me dire que cette façon de fonctionner ait quoi que ce soit de répréhensible.

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Pouvez-vous m'indiquer comment faire SVP ?
    On est bien d'accord que votre problème est résolu ?

    Il est résolu par la solution de @wiztricks et l'utilisation de sa méthode replace, puis un autre problème qui arrivera par la suite avec l'erreur de filtre où je vous propose de modifier le contenu de votre liste valeurs en remplaçant leurs éléments par des variables au lieu des chaînes de caractères.

    Si vous avez d'autres erreurs merci de les indiquer, voir mieux, créer un nouveau sujet.

    LA seule chose raisonnable qu'on aurait dû me répondre, c'était comment le faire
    Non, relisez les règles de ce forum, nous ne sommes pas là pour cela, l'objectif de ce forum est d'amener à vous faire comprendre les choses, sinon, des freelances sur diverses plateforme pourront vous aider, mais pas gratuitement.
    Ces remarques sont le seul coût pour vous éviter ces plateformes, à vous de les accepter ou pas...

  11. #11
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    @Fred1599 : D'accord, je me suis mal exprimé : m'expliquer mon erreur.

    tous Merci, je regarde tout ça. J'ai quand-même du mal à trouver mon chemin dans tout ce fatras.

    AMIcalement

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Bon, c'est résolu. Il y avait sans doute d'autres façons de faire, mais laissons tomber.

    A propos de la confusion entre la liste des noms de variables et la liste des variables, j'ai eu un doute et j'ai demandé au chat de confirmer, ce qu'il a fait avec beaucoup d'aplomb en me laissant entendre que c'était l'interface sqlite qui se débrouillait.

    Voici la réponse :
    Code python : 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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sqlite3
    import os
    import time
    from os import system
    try:
        conn = sqlite3.connect('SQLite3/Esperance.db')
    # Creation d'un objet curseur
        cursor = conn.cursor()
        for T_Ext in range(2):
            for T_Amb in range(3):
                for Prog in range(3):
                    for Heure in range(2):
                        for Etat in range(2):
                            valeurs=(T_Ext, T_Amb, Prog, Heure, Etat)
                        # Recherche de l'ordre à donner dans la table Ordres
                            requete="""
                                SELECT Ordre FROM Ordres 
                                    WHERE T_Ext = ?
                                    AND T_Amb = ?
                                    AND Prog = ?
                                    AND Heure = ?
                                    AND Etat = ?
                                """
                            sql_query = requete 
                            cursor.execute(requete, valeurs)
                            Ordre=cursor.fetchone()
                            ordre1 = str(Ordre[0]) if Ordre else "x"
                            # Formatage de la chaîne de sortie
                            output_string = (
                                f"{T_Ext:d}, "
                                f"{T_Amb:d}, "
                                f"{Prog:d}, "
                                f"{Heure:d}, "
                                f"{Etat:d}, "
                                f"{ordre1:s}\n"
                            )                      
                            with open("espion1.txt", 'a') as espion:
                                espion.write(output_string)
    # Terminer et fermer la connexion
        conn.commit()
    except sqlite3.Error as e:
        print(e)
        with open("temperature.txt", 'a') as fichier:
            fichier.write ("Erreur SQLite3 : " + e + "\n")
    finally: 
        if conn:
            conn.close()
    Merci à tous, et en route pour de nouvelles aventures.

    AMIcalement.

  13. #13
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 963
    Par défaut
    Citation Envoyé par L'AMI Yves Voir le message
    A propos de la confusion entre la liste des noms de variables et la liste des variables, j'ai eu un doute et j'ai demandé au chat de confirmer, ce qu'il a fait avec beaucoup d'aplomb en me laissant entendre que c'était l'interface sqlite qui se débrouillait.
    ChatGPT n'a pas réellement d'intelligence, il se contente de rechercher des réponses en se basant sur les données qui l'ont nourri.
    Si tu poses une question sans maîtriser ce que tu demandes, tu auras un réponse non maîtrisées, voire complément fausse.

    Pour voir la différence, il suffit d'un simple print.
    Avec un tuple formé avec les nom de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> valeurs=('T_Ext', 'T_Amb', 'Prog', 'Heure', 'Etat')
    >>> print(valeurs)
    ('T_Ext', 'T_Amb', 'Prog', 'Heure', 'Etat')
    Avec un tuples formé avec le contenu des variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> valeurs=(T_Ext, T_Amb, Prog, Heure, Etat)
    >>> print(valeurs)
    (0, 0, 0, 0, 0)
    Sur ta requête, avec les noms, tu auras ceci qui plantera :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Ordre FROM Ordres WHERE T_Ext = 'T_Ext' AND T_Amb = 'T_Amb' AND Prog = 'Prog' AND Heure = 'Heure' AND Etat = 'Etat'

    Sur ta requête, avec les contenus, tu auras ceci qui s'exécutera :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Ordre FROM Ordres WHERE T_Ext = 0 AND T_Amb = 0 AND Prog = 0 AND Heure = 0 AND Etat = 0

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par L'AMI Yves Voir le message
    et j'ai demandé au chat de confirmer, ce qu'il a fait avec beaucoup d'aplomb en me laissant entendre que c'était l'interface sqlite qui se débrouillait.
    Il est tellement merveilleux ce chat... il permet même de s'éviter à devoir réfléchir. L'univers de 1984 n'est plus très loin...

    Citation Envoyé par L'AMI Yves Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for T_Ext in range(2):
    	for T_Amb in range(3):
    		for Prog in range(3):
    			for Heure in range(2):
    				for Etat in range(2):
    					...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import itertools
    for (T_Ext, T_Amb, Prog, Heure, Etat) in itertools.product(range(2), range(3), range(3), range(2), range(2)):
    	...
    Mais ça tu ne pouvais pas le deviner.

    Citation Envoyé par L'AMI Yves Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("temperature.txt", 'a') as fichier:
    	fichier.write ("Erreur SQLite3 : " + e + "\n")
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("temperature.txt", 'a') as fichier:
    	print("Erreur SQLite3 : %s" % e, file=fichier)
    Ceci en revanche... Tu aurais lu un tutoriel Python...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Vous avez vu la onzième ligne de mon post ?
    Avez-vous lu la 8ème et 9ème ligne de votre post ?

  16. #16
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Est-cela que vous attendez ?
    Code sql : 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
    CREATE TABLE Ordres (
            T_Ext INTEGER,
            T_Amb INTEGER,
            Prog INTEGER,
            Heure INTEGER,
            Etat INTEGER,
            Ordre INTEGER
        );
    INSERT INTO Ordres VALUES(0,0,0,0,0,1);
    INSERT INTO Ordres VALUES(0,0,0,1,0,1);
    INSERT INTO Ordres VALUES(0,0,1,0,0,1);
    INSERT INTO Ordres VALUES(0,0,1,1,0,1);
    INSERT INTO Ordres VALUES(0,0,2,0,0,1);
    INSERT INTO Ordres VALUES(0,0,2,1,0,1);
    INSERT INTO Ordres VALUES(0,1,1,0,0,1);
    ....
    Est-ce que cela peut faire avancer le schimlblick ?

  17. #17
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Est-cela que vous attendez ?
    Vous répondez aux questions par décalage, outre cela 8 et 9ème ligne de votre post précédent dans votre code, il y a des points d'interrogation qui n'ont rien à faire dans votre ligne de requête.

    La création de votre table indique les types attendus pour déterminer une recherche par comparaison. Il est étonnant que vous recherchiez toutes les lignes de votre base de données où leurs colonnes sont les valeurs des éléments de valeurs.

    Peut-être que la proposition de wiztricks ne provoquera plus d'erreur, mais ça ne doit pas retourner grand chose comme résultat.

  18. #18
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Il y a beaucoup d'esprits forts par ici. Je ne me sens pas du tout comme ça.

    Oui il y avait des points d'interrogation qui n'avaient rien à faire là. Il n'y étaient pas avant : c'est sans doute des erreurs de correction. Mais cette correction n'a pas résolu le problème du "%".

    Pour expliquer la raison d'être de cette table : c'est la table de vérité d'un automate à états : il y a 5 variables d'entrées, dont certaines peuvent valoir 0 ou 1, d'autres 0,1 ou 2 etc. Du jeu de variable d'entrée se déduit un ordre. J'ai raisonné sur le problème : toute une bardée de "if" "else" dans un code inmaintenable, ou une table de base de données ? Ai-je raisonné comme une peau de tambour ? La table de vérité est créée sous forme d'une feuille Excel, et le code de création de la table SQLite est généré par une macro VBA. Il est vrai que je suis revenu plusieurs fois sur la table de vérité : sur la feuille Excel, j'arrive à raisonner. Dans l'imbroglio des if/else, je n'y crois pas.

    Qu'entendez-vous par "vous répondez par décalage" ? C'est une question de comptage des lignes ? J'ai présenté la chose comme ça, car, sur mon écran, cette ligne 11 ne se révélait qu'en actionnant l'ascenseur du message.

    AMIcalement.

  19. #19
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Oui il y avait des points d'interrogation qui n'avaient rien à faire là. Il n'y étaient pas avant : c'est sans doute des erreurs de correction. Mais cette correction n'a pas résolu le problème du "%".
    certes, mais ça aurait pu, maintenant on sait qu'il n'y a pas que cette erreur d'écriture qui posait problème.

    Pour expliquer la raison d'être de cette table : c'est la table de vérité d'un automate à états : il y a 5 variables d'entrées, dont certaines peuvent valoir 0 ou 1, d'autres 0,1 ou 2 etc. Du jeu de variable d'entrée se déduit un ordre. J'ai raisonné sur le problème : toute une bardée de "if" "else" dans un code inmaintenable, ou une table de base de données ? Ai-je raisonné comme une peau de tambour ? La table de vérité est créée sous forme d'une feuille Excel, et le code de création de la table SQLite est généré par une macro VBA. Il est vrai que je suis revenu plusieurs fois sur la table de vérité : sur la feuille Excel, j'arrive à raisonner. Dans l'imbroglio des if/else, je n'y crois pas.
    Mettez tout cela de côté, y compris votre code, ce ne sont que des détails, vous avez votre base de données, vos lignes et vos colonnes, essayez de créer une requête qui par exemple recherche la ligne 0,0,1,1,0,1, comment feriez vous ?

    EDIT :

    Par ex. ce petit code chez vous devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sqlite3
     
    connection = sqlite3.connect('SQLite3/Esperance.db')
    cursor = connection.cursor()
     
    values = (0, 1, 1)
    result = cursor.execute("SELECT Ordre FROM Ordres WHERE T_ext = ? AND Prog = ? AND Heure = ?", values)
    print(result.fetchone()[0])
    Observer le format de values et celui que vous présenté dans valeurs.

    Qu'entendez-vous par "vous répondez par décalage" ?
    Votre réponse correspond à mon premier post, alors que dans le second post, je posais une autre question, il y avait donc un décalage dans vos réponses (peut-être aurait-on pu lier vos réponses à l'ensemble de mes questions, mais c'est un détail).

    Il y a beaucoup d'esprits forts par ici. Je ne me sens pas du tout comme ça.
    Je ne vois pas où vous voulez en venir, ce que je ressens c'est que vous semblez un peu perdu, et à mon sens c'est directement lié au fait que vous ayez un peu trop facilement laissé la conduite de votre projet à chatGPT.
    Pas de soucis, on peut reprendre tout ça depuis le début, car oui, reprendre le sujet à bras le corps est un minimum pour que vous puissiez comprendre ce que raconte chatGPT et le corriger éventuellement.

  20. #20
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    a toutes les chances de fonctionner, mais ne s'applique pas (me semble-t-il) pour faire ce que je veux
    C'est un principe, ça s'applique donc à tout ce que vous souhaitez, remplacez values où se trouve des valeurs par des noms de variables contenant des valeurs, ça revient stricto au même...

    il s'agit bel et bien d'interroger ma table à partir des valeurs de variables, pas de constantes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    valeurs=('T_Ext','T_Amb','Prog','Heure','Etat')
    requete=(
        "SELECT Ordre FROM Ordres "
        "WHERE T_Ext = ? "
        "AND T_Amb =? "    
        "AND Prog =? "    
        "AND Heure =? "   
        "AND Etat =?"
        ) 
     
    cursor.execute(requete, valeurs)
    Concentrez vous sur votre variable valeurs qui ne contient pas des variables, mais des chaînes de caractères.

    Pour être plus clair, valeurs=('T_Ext','T_Amb','Prog','Heure','Etat') différent de valeurs=(T_Ext, T_Amb, Prog, Heure, Etat), voyez vous la nuance ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  2. Embarque un interpreteur Python dans une appli C++
    Par romeo9423 dans le forum MFC
    Réponses: 1
    Dernier message: 01/12/2005, 10h52
  3. Réponses: 4
    Dernier message: 19/10/2005, 09h20
  4. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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