Bonjour, j’ai un petit souci et je ne vois pas comment m’en dépatouiller. Je n’ai pas trouvé (ou mal cherché) sur mon moteur de recherche préféré.
J’ai plusieurs "Catalogues" à insérer dans une base de données. Les tables contenant ces "Catalogues" comportent 3 champs pour la plupart (id, Code, Libellé), mais j’ai un catalogue qui contient 4 champs.
Le but de mon script est d’avoir une fonction qui fonctionne pour toutes mes insertions. J’ai donc bricolé un peu. Voici une extraction du code posant souci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def mafonction(nom_fichier, table, champs, libelle_nb_valeurs): with open(nom_fichier, newline='') as fichier: lecteur = csv.reader(fichier, delimiter=';', quotechar='|') for row in lecteur: Code = str(row[0]) Libelle = str(row[1]) if Code != "Code": valeurs = [Code, Libelle] curseur.execute("""INSERT INTO """ + table + """(""" + champs + """) VALUES |(""" + libelle_nb_valeurs + """)""", (valeurs)); nom_fichier = "Catalogue_Modulateur.csv" table = "CATALOGUE_MODULATEUR" champs = "CATALOGUE_MODULATEUR_Code, CATALOGUE_MODULATEUR_Libelle" libelle_nb_valeurs = "?, ?" # Mettre autant de "?" qu'il y a de données à insérer mafonction(nom_fichier, table, champs, libelle_nb_valeurs) |
J’ai été obligé de garder cette partie là :
1 2 | Code = str(row[0]) Libelle = str(row[1]) |
Du coup, je traite bien le cas où j’ai deux champs (hors identifiant) mais pas celui où j’en ai un de plus.
Je pourrais ajouter une variable et faire :
1 | mafonction(nom_fichier, nb_champs, table, champs, libelle_nb_valeurs) |
Puis dans ma fonction dire que si nb_champs = 3 j’ai :
1 2 | Code = str(row[0]) Libelle = str(row[1]) |
Et si j’ai 4 champs, j’ai :
1 2 3 | Code = str(row[0]) Libelle = str(row[1]) xxx = str(row[2]) |
Mais c’est pas super … Surtout que je pourrais éventuellement vouloir intégrer dans ma bdd des fichiers csv avec plus de champs dans le futur.
Une idée ? Merci d’avance.