当前位置: 首页 > 面试题库 >

ValueError:dict包含不在字段名称中的字段

燕元明
2023-03-14
问题内容

有人可以帮我弄这个吗。

我有我的选择查询

selectAttendance = """SELECT * FROM table """

我想要选择查询的内容,并在下载csv文件时包含标题,因此我执行了以下查询:

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()

但这给了我这个错误

**ValueError: dict contains fields not in fieldnames**

我想在我下载的csv文件中有这样的输出:

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

先感谢您。


问题答案:

如错误所示:来自查询的词典包含的键多于您在DictWriter构造函数中指定的字段名称。

一种解决方案是提前对其进行过滤,如下所示:

field_names = ["Bio_Id","Last_Name", ...]
writer = csv.DictWriter(csvfile,fieldnames=field_names , delimiter = ';')
writer.writeheader()
data = {key: value for key, value in db.session.execute(selectAttendance).items()
        if key in field_names}
writer.writerow(data)

另一种解决方案是仅使用那些字段来构造查询:

query = 'SELECT %s FROM table' % ', '.join(field_names)

但是,蒂姆·皮茨克(Tim Pietzcker)的答案是最好的。



 类似资料:
  • 问题内容: 我正在使用ADO从Excel工作簿导入数据。我在一个工作表上遇到麻烦,其中一个列名包含一个点:“ Col.1”。 我尝试了所有发现的东西:双引号,方括号,后卫。什么都行不通。会引发错误,或者在每行上查询输出“ Col.1”。 鉴于我无法重命名源文件中的列, 如何使用其名称而不是其编号([F1])手动选择此列? 问题答案: 我终于找到了如何从此列中检索数据。 您需要 替换“。” 按“#”

  • 我试图反序列化JSON的格式 类类型 因为我有一个映射类型,所以我添加了一个键反序列化器来反序列化 但是当我尝试反序列化时,我得到了一个异常 这是因为它遇到了在中,它在那里中断。如果我将整个键放在双引号中,它会将整个键传递给我的反序列化程序。 有没有一种方法,我可以迫使它转义char,而不必把整个关键与引号。

  • 我正在使用HibernateValidator4.2。0.Final,我正在寻找在错误消息中包含类字段名的最简单方法。 我发现以下线程使用带有Hibernate验证器的定制ResourceBundle。根据这一点,我应该为每个约束注释创建自定义注释,为每个约束注释添加一个属性。 有没有更干净的方法来实现这一点? 以下代码: 生成默认错误:大小必须介于0和5之间。 我希望它是:myField大小必须

  • 问题内容: 我有一个来自遗留系统的悖论表,我需要对其进行单个查询。字段名称中包含空格-即“街道1”。当我尝试在delphi中仅对“街道1”字段制定查询时,出现错误- 关键字使用无效。令牌:1,行号:1 Delphi V7-对象Pascal,标准Tquery对象名称query1。 问题答案: 您需要在查询中为字符串加上表名的前缀。 例如:字段名称为“ Street 1”,表称为客户,选择为:

  • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

  • 问题内容: 我正在尝试在ElasticSearch中运行类似的字段查询: 意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。 我该怎么做? 问题答案: 我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引: 然后,您可以索引一些数据: 最后,您可以像这样搜索: 然后您将获得前两个文档,