Partage
  • Partager sur Facebook
  • Partager sur Twitter

Traiter un fichier excel et le stocker en BDD

    10 décembre 2023 à 21:50:48

    Bonjour,

    J'aimerais extraire un fichier excel (.xlsx) qui contiendra un nombre de lignes variables.

    Ce fichier excel contient des plusieurs colonnes.

    Colonne A, B, C etc... et la table de ma base de données sqlite contient exactement les memes colonnes.

    Je n'arrive pas a trouver une maniere ou definir un algo qui puisse remplir ma bdd avec toutes les lignes du fichier excel.

    Pour le moment j'arrive à recuperer dans une liste toutes mes lignes du fichier excel dans des sous listes.

    def path_file_excel(self, path_file, path_bdd):
            try:
                file = open(path_file)
                extension = Path(path_file).suffixes
    
                if extension[0] == ".xlsx" or extension[0] == ".XLSX":
                    data = pandas.read_excel(path_file, usecols="A:Q")
                    liste = []
                    i = 0
                    
                    while i != len(data):
                        liste.append(data.values[i])
                        i += 1
                        
                    return liste
    
                else:
                    print("L'extension du fichier doit etre .xlsx")
                    exit()
    
            except FileNotFoundError as e:
                print(f"Erreur d'ouverture du fichier : {e}")

    Il faut aussi prendre en compte que certaine ligne comme la 9 il peut y avoir certaines cases avec plusieurs valeurs (9B), et je veux stocker ces plusieurs valeurs dans la meme case aussi dans la bdd.

    Merci de votre aide

    • Partager sur Facebook
    • Partager sur Twitter
    La connaissance ne vaut que si elle est partagée.
      10 décembre 2023 à 22:18:15

      Bonsoir,

      • Ouvrir une connexion à la base de données SQLite
      • Si la table cible n'existe pas, là créer
      • Pour chaque ligne dans la liste de données Excel, insérer la ligne dans la table de la BDD.
      • Enregistrer les modifications dans la BDD
      • Fermer la connexion à la BDD
      • Partager sur Facebook
      • Partager sur Twitter

      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)

        11 décembre 2023 à 19:08:30

        Merci je m'y suis remis ce soir et ca fonctionne. Est ce qu'il y aurait une maniere mieux qu'une autre en terme de rapidité d'execution avec le moins d'accès a la BDD ?

        Et aussi quand j'insère des données dans la BDD ma 1ere colonne id reste a NULL, comment je dois faire pour qu'un id se génère automatiquement a chaque insertion ?

        Voila comment j'ai creer ma table :

        CREATE TABLE IF NOT EXISTS produits(
                                                        id INTEGER AUTO_INCREMENT PRIMARY KEY,
                                                        Valeur A text,
                                                        Valeur B text,
                                                        Valeur C text,
                                                        Valeur D text,
                                                        Valeur E text,
                                                        Valeur F text,
                                                        Valeur G text,
                                                        Valeur H text,
                                                        Valeur I text,
                                                        Valeur J text,
                                                        Valeur K text,
                                                        Valeur L text,
                                                        Valeur M text,
                                                        Valeur N text,
                                                        Valeur O text,
                                                        Valeur P text,
                                                        Valeur Q text);



        Merci.

        -
        Edité par Jobard91 11 décembre 2023 à 19:18:39

        • Partager sur Facebook
        • Partager sur Twitter
        La connaissance ne vaut que si elle est partagée.
          11 décembre 2023 à 20:06:40

          Pas sûr de la syntaxe AUTO_INCREMENT, j'aurai plutôt dit AUTOINCREMENT si c'est une base de données SQLite.
          • Partager sur Facebook
          • Partager sur Twitter

          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)

            11 décembre 2023 à 22:08:45

            Je viens d'essayer avec AUTOINCREMENT ca me signale une erreur de syntaxe
            • Partager sur Facebook
            • Partager sur Twitter
            La connaissance ne vaut que si elle est partagée.
              12 décembre 2023 à 7:58:56

              Salut,

              La syntaxe est plutôt :

              id INTEGER PRIMARY KEY AUTOINCREMENT

              De plus, il n'est pas nécessaire de préciser AUTOINCREMENT.

              import sqlite3
              
              data_person_name = [
                  ("Michael", "Fox"),
                  ("Adam", "Miller"),
                  ("Andrew", "Peck"),
                  ("James", "Shroyer"),
                  ("Eric", "Burger"),
              ]
              
              con = sqlite3.connect(":memory:")
              
              with con:
                  c = con.cursor()
              
                  c.execute(
                      """CREATE TABLE person_name
                               (id INTEGER PRIMARY KEY,
                                first_name varchar(20) NOT NULL,
                                last_name varchar(20) NOT NULL)"""
                  )
                  c.executemany(
                      "INSERT INTO person_name(first_name, last_name) VALUES (?,?)",
                      data_person_name,
                  )
              
                  for row in c.execute("SELECT * FROM person_name"):
                      print(row)
              
              (1, 'Michael', 'Fox')
              (2, 'Adam', 'Miller')
              (3, 'Andrew', 'Peck')
              (4, 'James', 'Shroyer')
              (5, 'Eric', 'Burger')





              • Partager sur Facebook
              • Partager sur Twitter
                13 décembre 2023 à 20:51:08

                Merci ca fonctionne bien
                • Partager sur Facebook
                • Partager sur Twitter
                La connaissance ne vaut que si elle est partagée.

                Traiter un fichier excel et le stocker en BDD

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown