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 :

Problème création BDD avec SQLITE via fichier CSV


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 7
    Par défaut Problème création BDD avec SQLITE via fichier CSV
    Bonjour,

    Je souhaite créer une table a partir d'un fichier CSV. J'obtiens un message d'erreur lors de l'INSERT que je n'arrive pas à résoudre malgré environ 2h de recherche sur les sites communautaires (Stackoverflow à pourtant réussi à me sortir de pas mal de problème mais là... J'ai pensé qu'il s'agissait peut-être d'un problème d'encodement mais impossible d'utiliser l'argument 'encoding='utf-8''

    Le message d'erreur en question: Nom : Erreur.PNG
Affichages : 106
Taille : 9,3 Ko

    Voici le code en question

    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
     
    import sqlite3
    import csv
    import os
     
    conn = sqlite3.connect('/mnt/Disk2/mysql/Equipements.db')
    c = conn.cursor()
    if os.path.isfile('/mnt/Disk2/mysql/Equipements.db'):
    	c.execute("DROP TABLE Equipements")
    c.execute('''CREATE TABLE Equipements (Id text, Nom text, Type text, Ip text)''')
     
    with open('EquiVANNES.csv') as csvfile:
    	reader = csv.reader(csvfile, delimiter=';', quotechar='|')
    	tab = []
    	for row in reader:
    		tab.append(row)
    		c.executemany('INSERT INTO Equipements VALUES (?,?,?,?)', tab)
    	print (tab)
     
    conn.commit()
     
    t=('NVR',)
    c.execute('SELECT * FROM Equipements WHERE Type=?', t)
    print c.fetchone()

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

    Relisez votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with open('EquiVANNES.csv') as csvfile:
    	reader = csv.reader(csvfile, delimiter=';', quotechar='|')
    	tab = []
    	for row in reader:
    		tab.append(row)
    		c.executemany('INSERT INTO Equipements VALUES (?,?,?,?)', tab)
    	print (tab)
    a chaque itération, on lit une ligne du fichier pour l'ajouter à la liste de listes tab qu'on insère via c.executemany dans la table Equipements.
    Si le fichier CSV contient 10 lignes vous allez avoir 99 entrées dans la table avec plein de doublons!

    c.execute('INSERT INTO Equipements VALUES (?,?,?,?)', row) serait plus "adapté" (et si vous voulez insérer tous les enregistrements d'un coup, çà se fait après leur lecture (i.e. après la boucle).


    Pour le message d'erreur, vous travaillez encore avec Python2, mettez vous à jour çà urge!

    - 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
    Juillet 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 7
    Par défaut
    J'ai passer mon VoCore2 en python3. Je rencontre toujours un soucis qui est "ModuleNotFoundError: No module named 'sqlite3'". J'ai regarder sur internet et ils explique que normalement il est déjà dans python3 nativement, et conseillent donc de tout reinstaller. Le hic c'est que le VoCore2 ne dispose pas de tout les fonctionnalité... Je ne peux meme pas faire un apt-get :'( ...

    Voici les dernieres modif de mon 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
    import sqlite3
    import csv
    import os
     
    conn = sqlite3.connect('/mnt/Disk2/mysql/Equipements.db')
    c = conn.cursor()
    #if os.path.isfile('/mnt/Disk2/mysql/Equipements.db'):
    	#c.execute("DROP TABLE Equipements")
    c.execute('''CREATE TABLE Equipements (Id text, Nom text, Type text, Ip text)''')
     
    with open('EquiVANNES.csv') as csvfile:
    	reader = csv.reader(csvfile, delimiter=';', quotechar='|')
    	tab = []
    	for row in reader:
    		tab.append(row)
    	print (tab)
    	c.executemany('INSERT INTO Equipements VALUES (?,?,?,?)', tab)
     
    conn.commit()
     
    t=('NVR',)
    c.execute('SELECT * FROM Equipements WHERE Type=?', t)
    rows = c.fetchall()
    for row in rows:
    	print(row)
    concernant la suggestion c.execute('INSERT INTO Equipements VALUES (?,?,?,?)', row) je l'avais déjà essayé mais il me retourne un message d'erreur car il attend 4 argument et non pas 1

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

    Citation Envoyé par LoganLB Voir le message
    concernant la suggestion c.execute('INSERT INTO Equipements VALUES (?,?,?,?)', row) je l'avais déjà essayé mais il me retourne un message d'erreur car il attend 4 argument et non pas 1
    Si row ne contient qu'un élément, c'est que votre fichier n'est pas ce que vous croyez ou que le délimiteur des colonnes n'est pas ';'.
    C'est facile à vérifier avec print (row)..

    Citation Envoyé par LoganLB Voir le message
    J'ai passer mon VoCore2 en python3. Je rencontre toujours un soucis qui est "ModuleNotFoundError: No module named 'sqlite3'". J'ai regarder sur internet et ils explique que normalement il est déjà dans python3 nativement, et conseillent donc de tout reinstaller. Le hic c'est que le VoCore2 ne dispose pas de tout les fonctionnalité... Je ne peux meme pas faire un apt-get :'( ...
    Si vous débutez avec Python, autant choisir un environnement un peu moins austère pour apprendre.

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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 7
    Par défaut
    Merci beaucoup pour votre réponse,

    J'ai finalement réussi a contourner mon problème et à trouver une solution.
    Pour répondre à votre dernier message je ne suis pas entrain d'apprendre, il s'agit d'un besoin pro pour lequel je suis contraint de travailler sur un matériel précis. J'ai bien essayé de la passer en Python 3 mais ce dernier n'a pas aimé donc je suis contraint de rester en 2.

Discussions similaires

  1. Problème Création BDD Oracle 9i
    Par artatnas dans le forum Installation
    Réponses: 1
    Dernier message: 27/07/2007, 13h40
  2. Réponses: 25
    Dernier message: 05/07/2006, 16h46
  3. Réponses: 6
    Dernier message: 12/06/2006, 16h38
  4. Probléme de connexion avec ATT via une freebox
    Par ybertrand dans le forum Hardware
    Réponses: 3
    Dernier message: 17/10/2005, 16h06

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