ValueError: dict contient des champs qui ne sont pas dans fieldnames
Quelqu'un peut m'aider avec cela.
J'ai ma requête Select
selectAttendance = """SELECT * FROM table """
Et je veux que le contenu de ma requête select et inclure un en-tête lorsque je télécharge le fichier csv,
J'ai donc fait cette requête:
with open(os.path.join(current_app.config['UPLOAD_FOLDER'], 'csv.csv'), 'wb') as csvfile:
writer = csv.DictWriter(csvfile,fieldnames = ["Bio_Id","Last_Name","First_Name","late","undertime","total_minutes", "total_ot", "total_nsd", "total_absences"], delimiter = ';')
writer.writeheader()
writer.writerow(db.session.execute(selectAttendance))
db.session.commit()
mais il me donne cette erreur
**ValueError: dict contains fields not in fieldnames**
Je veux avoir comme cette sortie dans mon fichier csv téléchargé:
Bio_Id Last_Name First_Name late undertime total_minutes total_ot total_nsd total_absences
1 Joe Spark 1 1 2 1 1 1
Vous en remercie d'avance.
- Donc, avez-vous regardé le dictionnaire et les ont comparées avec les en-têtes de vous le préciser?
- Ce qui est pas clair dans le message d'erreur?
- Je ne sais pas pourquoi, après ValueError: dict contient des champs qui ne sont pas dans fieldnames:***le contenu de l'sélectionnez*** pas d'économie dans le csv spécifié
- Parce que, après l'erreur ne se passe rien; le programme est tombé en panne.
- Im ici parce que je ne comprends pas le msg d'erreur, pouvez-vous l'expliquer?
- Mon problème était que j'avais pris un dictionnaire clé/valeur dans le premier dictionnaire dans un tableau de dictionnaires et j'ai été en passant
arr[0].keys()
àfieldnames
maisarr[1:]
tous avaient encore le champ supplémentaire, d'où l'erreur
Vous devez vous connecter pour publier un commentaire.
Que les états d'erreur: le dictionnaire qui vient de la requête contient plus importants que les noms des champs que vous avez spécifié dans le DictWriter constructeur.
Une solution serait de filtre à l'avance, quelque chose comme ceci:
Une autre solution pourrait être de construire la requête en utilisant uniquement les champs:
Cependant, Tim Pietzcker la réponse est la meilleure.
Que le message d'erreur indique clairement, votre dictionnaire contient des clés qui n'ont pas d'entrée correspondante dans votre
fieldnames
paramètre. En supposant que ce sont juste des champs supplémentaires, vous pouvez les ignorer en utilisant leextrasaction
paramètre lors de la construction de votreDictWriter
de l'objet:Salut à tous merci d'avoir répondu.
J'ai enfin trouvé comment faire.
voici le code