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 :

sqlite3.OperationalError: no such table: [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 264
    Points : 94
    Points
    94
    Par défaut sqlite3.OperationalError: no such table:
    Bonjour à tous,

    J'ai mis en titre l'erreur que je rencontre. J'ai bien compris qu'apparemment je ne suis pas le seul car le sujet se retrouve sur beaucoup de forums. Je n'arrive cependant pas à comprendre à quoi est dû cette erreur.

    Dans le script que je poste ici il y a 3 bases de données : la première s'appelle "Eleves.db" et est directement créée par le script Python; je peux aller extraire des données sans problème, ça marche
    Les deux autres CP.db et Ecole.db proviennent de fichiers css trouvés sur le net et mis sous forme de BDD grâce au logiciel DB BROWSER FOR SQlite. Systématiquement lorsque je veux aller chercher des données sur ces deux bases, j'obtiens le message sqlite3.OperationalError: no such table

    J'ai bien vérifié l'intitulé de mes fichiers. J'utilise d'ailleurs os.listdir() pour vérifier (et vous montrer) que ces fichiers sont bien présents.



    Voici le code :


    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    import os
    import sqlite3
     
    def creer_table():
        conn=sqlite3.connect("Eleve.db")
        cur=conn.cursor()
        cur.execute("DROP TABLE IF EXISTS Eleve") # suppression éventuelle de l'ancienne table
        # Création de la table :
        cur.execute("""CREATE TABLE Eleve(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT,
        prenom TEXT,
        age INTEGER,
        classe TEXT)
        """)
        conn.commit()
        cur.close()
        conn.close()
     
    creer_table()
     
    # ENTRER DES DONNEES DANS UNE TABLE
    print((os.listdir()))
    conn=sqlite3.connect("Eleve.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO Eleve (id, nom, prenom, age, classe) VALUES (1, 'Dupont', 'Jean', 15, '2A')")
    conn.commit()
    conn.close()
     
     
     
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "Eleve.db""
    conn=sqlite3.connect("Eleve.db")
    cur=conn.cursor()
    cur.execute("SELECT nom, prenom FROM Eleve WHERE nom='Dupont'")
    rows = cur.fetchall()
    for row in rows:
        print(row)
    conn.commit()
    conn.close()
     
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "CP.db""
    conn=sqlite3.connect('CP.db')
    cur=conn.cursor()
    cur.execute("SELECT Nom_de_la_commune FROM CP WHERE commune='METZ'")
    rows = cur.fetchall()
    for row in rows:
        print(row)
    conn.commit()
    conn.close()
     
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "Ecole.db""
    fichier="C:/Users/chris/Documents/mesScryptPython/Ecoles.db"
    conn=sqlite3.connect(fichier)
    #conn=sqlite3.connect("Ecole.db")
    cur=conn.cursor()
    cur.execute("SELECT commune, patronyme FROM Ecoles WHERE commune='METZ'")
    rows2 = cur.fetchall()
    for row in rows2:
        print(row)
    conn.commit()
    conn.close()
    et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> 
    *** Remote Interpreter Reinitialized ***
    ['CodesPosteaux.sqbpro', 'CP.db', 'CP.sqlite3', 'Ecoles.db', 'Eleve.db', 'module2.py', 'test3.py']
    ('Dupont', 'Jean')
    Traceback (most recent call last):
      File "C:\Users\chris\Documents\mesScryptPython\test3.py", line 48, in <module>
        cur.execute("SELECT Nom_de_la_commune FROM CP WHERE commune='METZ'")
    sqlite3.OperationalError: no such table: CP
    >>>
    Merci pour votre aide.

    Chris

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

    Si le nom du fichier est CP.db rien ne dit que la base de données qu'il contient aura une table nommée CP.... Reste à savoir quelles tables contient le fichier que vous avez récupéré... ce qui passe par des recherches sur Internet pour trouver des articles comme celui-ci.

    note: normalement DB Browser for SQLite dispose d'une interface pour visualiser la base... (et les tables qu'elle contient)

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

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 227
    Points : 4 711
    Points
    4 711
    Par défaut
    bonjour

    j'espère que tu sais déjà que cela n'a pas de sens de créer une base de donnée par table
    $moi= ( !== ) ? : ;

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    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 : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    et de commit quand on fait une simple recherche...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 264
    Points : 94
    Points
    94
    Par défaut
    Un grand merci à wiztricks

    Je ne fais en effet que découvrir les BDD et dans le cas présent, je confondais BDD et tables. Désolé pour mon ignorance et merci wiztricks pour m'avoir éclairé.
    Comme ça, ça marche :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import os
    
    
    import sqlite3
    
    def creer_table():
        conn=sqlite3.connect("Eleve.db")
        cur=conn.cursor()
        cur.execute("DROP TABLE IF EXISTS Eleve") # suppression éventuelle de l'ancienne table
        # Création de la table :
        cur.execute("""CREATE TABLE Eleve(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT,
        prenom TEXT,
        age INTEGER,
        classe TEXT)
        """)
        conn.commit()
        cur.close()
        conn.close()
    
    creer_table()
    
    # ENTRER DES DONNEES DANS UNE TABLE
    print(os.getcwd())
    print((os.listdir()))
    conn=sqlite3.connect("Eleve.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO Eleve (id, nom, prenom, age, classe) VALUES (1, 'Dupont', 'Jean', 15, '2A')")
    conn.commit() # Les bases de données sont des systèmes transactionnels. Cela signifie qu'un programme qui interagit avec une base de données fait ses modifications en mémoire, jusqu'à ce que celles-ci soient validées. En Python, les transactions sont validées en appelant la méthode commit() sur l'objet connexion.
    conn.close()
    
    
    
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "Eleve.db""
    conn=sqlite3.connect("Eleve.db")
    cur=conn.cursor()
    cur.execute("SELECT nom, prenom FROM Eleve WHERE nom='Dupont'") #### IMPORTANT Le nom de la BDD ne doit pas être suivi de l'extension .db'
    rows = cur.fetchall()
    for row in rows:
        print(row)
    conn.commit() # Les bases de données sont des systèmes transactionnels. Cela signifie qu'un programme qui interagit avec une base de données fait ses modifications en mémoire, jusqu'à ce que celles-ci soient validées. En Python, les transactions sont validées en appelant la méthode commit() sur l'objet connexion.
    conn.close()
    
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "CP.db""
    conn=sqlite3.connect('CP.db')
    cur=conn.cursor()
    cur.execute("SELECT Nom_de_la_commune, Code_postal, Libelle_d_acheminement FROM tableCP WHERE Nom_de_la_commune='METZ'")
    rows = cur.fetchall()
    for row in rows:
        print(row)
    conn.commit() # Les bases de données sont des systèmes transactionnels. Cela signifie qu'un programme qui interagit avec une base de données fait ses modifications en mémoire, jusqu'à ce que celles-ci soient validées. En Python, les transactions sont validées en appelant la méthode commit() sur l'objet connexion.
    conn.close()
    
    # CHERCHER DES DONNEES DANS UNE TABLE - ici table "Ecole.db""
    conn=sqlite3.connect("Ecoles.db")
    cur=conn.cursor()
    cur.execute("SELECT commune, patronyme FROM effectifs WHERE commune='METZ'") #### IMPORTANT Le nom de la BDD ne doit pas êtr
    rows2 = cur.fetchall()
    for row in rows2:
        print(row)
    conn.commit() # Les bases de données sont des systèmes transactionnels. Cela signifie qu'un programme qui interagit avec une base de données fait ses modifications en mémoire, jusqu'à ce que celles-ci soient validées. En Python, les transactions sont validées en appelant la méthode commit() sur l'objet connexion.
    conn.close()

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 938
    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 : 3 938
    Points : 7 347
    Points
    7 347
    Par défaut
    Les commit inutiles sont toujours présents... ce qui prouve que vous n'avez pas compris ce que je disais, et que vous n'avez pas chercher sur internet pourquoi on utilise commit.

    Vous vous connectez n fois à la même base de données (on se connecte une fois et on close une fois).
    C'est une question de bon sens, tant qu'une base de données est ouverte, on fait ce qu'on veut (recherches, enregistrements, mises à jour), puis quand on termine le programme, on close sa base de données avant.

    Ils semblent qu'il y a du code redondant, il est temps de comprendre l'intérêt des fonctions peut-être...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Chris33 Voir le message
    Un grand merci à wiztricks
    Je ne fais en effet que découvrir les BDD et dans le cas présent, je confondais BDD et tables. Désolé pour mon ignorance et merci wiztricks pour m'avoir éclairé.
    Oui parce que ce qu'ont dit les autres, franchement on s'en bat les c... !!!

    Citation Envoyé par Chris33 Voir le message
    Comme ça, ça marche :
    Non, même pas. Un instant j'ai cru que ça allait "branquignoler" un peu mais en relisant ton code avec plus d'attention je me suis rendu compte que tu continuais à chercher tes infos dans autant de bases que ce que tu as de tables (et comme en plus ton code ne crée même pas ces fameuses tables, il ne fonctionne que chez-toi). Donc finalement tu n'as pas été aussi bien éclairé que ce que tu le penses. Tu aurais pu peut-être remercier aussi les autres intervenants, histoire de leur laisser l'illusion que tu avais au-moins lu leurs écrits.

    Citation Envoyé par Chris33 Voir le message
    conn.commit() # Les bases de données sont des systèmes transactionnels. Cela signifie qu'un programme qui interagit avec une base de données fait ses modifications en mémoire, jusqu'à ce que celles-ci soient validées. En Python, les transactions sont validées en appelant la méthode commit() sur l'objet connexion.
    Déjà si tu avais seulement lu les commentaires du bouquin au lieu de les recopier bêtement dans ton code...

    Citation Envoyé par Chris33 Voir le message
    Ouais voilà, félicite-toi car personne d'autre ne le fera.

    Citation Envoyé par fred1599 Voir le message
    C'est une question de bon sens, tant qu'une base de données est ouverte, on fait ce qu'on veut (recherches, enregistrements, mises à jour), puis quand on termine le programme, on close sa base de données avant.
    Comme dans "Astérix et le devin" : quand on a fini de lire le poisson, on le referme et on le range.
    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]

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

Discussions similaires

  1. sqlite3.OperationalError: no such table: ranking
    Par Alkiw13 dans le forum GUI
    Réponses: 1
    Dernier message: 21/10/2022, 15h15
  2. sqlite3.OperationalError: no such table
    Par TUDIP dans le forum Général Python
    Réponses: 2
    Dernier message: 19/12/2020, 20h00
  3. [Python 3.X] sqlite3.OperationalError: no such table:
    Par Thallhos dans le forum Tkinter
    Réponses: 2
    Dernier message: 11/04/2020, 10h02
  4. Perl et SQLite3 : no such table
    Par The_GuiGui dans le forum SGBD
    Réponses: 2
    Dernier message: 17/10/2016, 17h39
  5. sqlite3.OperationalError: no such column: wchoix
    Par vieux60ans dans le forum SQLite
    Réponses: 2
    Dernier message: 30/07/2013, 00h44

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