【问题标题】:Why do I get this DBeaver error when importing data from a CSV file?为什么从 CSV 文件导入数据时出现此 DBeaver 错误?
【发布时间】:2021-10-17 02:37:52
【问题描述】:

我是一名学生,我正在做一个项目。前提是我正在开发的这个程序将学生注册的天数(MF)、他们每天注册的小时数以及他们注册的课程作为输入。然后,它查询一个 PostgreSQL每个模块的进度小时数(作业应该花费多长时间的“面值”)的数据库,并运行算法,输出学生应该争取的大致截止日期,以便由截止日期(为整个课程设置,而不是为单个作业设置)。

现在,我过去曾使用过数据库,但对于下一个交付物,我正在彻底检查该程序,以增加对学生选择他们的程序的支持,然后将使用适当的课程填充一个选项菜单。为此,我需要添加更多测试数据。在将其他 CSV 文件导入架构的过程中,出现错误:

无法加载实体属性

原因: 找不到目标属性[Sequence]

在 CSV 文件中,“Sequence”是其中一列的名称。

这个错误是什么意思?而且,我该如何解决呢?我查看了 CSV,找不到任何明显错误的地方;标题以及所有相关数据都在那里。理论上,我可以在 DBeaver 中直接与 CSV 文件创建连接,而不是将它们的数据导入数据库,并且我已经测试过这样做并且它确实按预期工作,但是我用来查询的 Python 模块如果我这样做而不是使用传统数据库(这是我在更改数据库之前所做的),数据库(psycopg2)似乎无法找到它。

编辑:针对 Adrian 的评论,CSV 数据的示例如下:

PK,Active,Sequence,Name,Number,Hours,Start Date,Stop Date,Modified When,Modified By
183328,TRUE,1,ASP.NET Core Fundamentals,1,2.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183329,TRUE,2,F-Q1,2,3.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183330,TRUE,3,Assignment - Clock-in Station,3,5.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183331,TRUE,4,ASP.NET MVC Fundamentals,4,2.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183332,TRUE,5,MVC-Q1,5,3.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183333,TRUE,6,Wishlist Application,6,5.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183334,TRUE,7,ASP.NET Web APIs,7,2.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183335,TRUE,8,API-Q1,8,3.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183336,TRUE,9,Starchart API,9,5.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf
183337,TRUE,10,Dependency Injection,10,2.00,07-01-2020,06-30-2299,06-12-2020 09:09:27 AM,Laraine.Moellendorf

我不会将此数据导入现有表中;相反,DBeaver 有一个功能,可以在没有现有表的情况下导入 CSV,并且将生成一个具有匹配字段标题和数据类型的表来放置数据。所以,我没有要提供的架构。

产生错误的 DDL 如下:

CREATE TABLE "Software Development".newtable (
    pk integer NULL,
    active boolean NULL,
    "Sequence" integer NULL,
    "name" varchar(32) NULL,
    "Number" integer NULL,
    hours real NULL,
    "Start Date" varchar(10) NULL,
    "Stop Date" varchar(10) NULL,
    "Modified When" varchar(22) NULL,
    "Modified By" varchar(19) NULL
);

在回答 Adrian 的最后一个问题时,DBeaver 可以直接链接到 CSV 文件,而不是将其数据导入数据库中的表中。这就是我所说的它不是“传统数据库”的意思。

【问题讨论】:

  • 人们认为这是一大堆废话,对问题没有真正的解释。在您的问题中添加 1)CSV 数据示例 2)表的架构 3)您运行的查询出现错误 4)解释“传统数据库”?
  • @AdrianKlaver 感谢您的反馈。我的问题已更新以解决您的问题。
  • 您仍然需要显示产生错误的查询/代码。虽然猜测它没有正确引用 CSV 文件中的“序列”,并且它被小写为“序列”,这与表中的字段名称“序列”不匹配。
  • 我没有运行查询或任何代码。我正在使用 DBeaver 的 GUI 导入 CSV 数据。当我尝试预览数据导入的结果时,会出现错误,如果我继续导入,它会再次出现。另外,我仔细检查了 DDL 正确地引用了“序列”。我还尝试将 CSV 中的标题更改为“sequence”,但发生了同样的错误,只是使用了“sequence”。
  • 嗯,我很确定这是某种折叠问题。要尝试的事情: 1) 查看 Postgres 日志以查看是否显示任何有用的错误。 2)制作一个所有字段名都是小写的目标表版本,然后导入到那个版本。

标签: python postgresql csv dbeaver


【解决方案1】:

我已升级到 DDeaver 版本 21.2.0,现在一切正常。我在尝试将查询导出到 SQLite 表时遇到错误。

所以解决办法是升级DBeaver。

【讨论】:

    【解决方案2】:

    我的解决方法是对 CSV 和 dBeaver 中的列使用类似“seq_number”的内容,然后将列重命名为“sequence”。它不漂亮,但它有效。我只是针对名为“depth”的列的相同问题执行此操作。

    【讨论】:

      【解决方案3】:

      这似乎是 dBeaver 21.1.4 (https://github.com/dbeaver/dbeaver/issues/13542) 的问题。当前的解决方法是降级到以前的版本(21.1.3)。

      【讨论】:

      • 100% 验证,仍然在 21.1.5 版本上复制
      • 可以验证,DBeaver 21.1.5中依然出现。使用数据库:Postgresql。我降级到 21.1.0 并且导入工作正常。
      猜你喜欢
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2018-08-25
      相关资源
      最近更新 更多