由于“created_at”错误,将CSV上传到MySQL失败

0x6upsns  于 2023-06-03  发布在  Mysql
关注(0)|答案(2)|浏览(362)

摘要:我尝试使用MySQL Workbench导入功能将csv文件上传到数据库表,但没有成功。错误日志显示“createdAt”列存在问题。我在Mac上工作。
我正在尝试使用MySQL Workbench导入向导将包含一些数据的csv文件上传到数据库中的表中。查找文件、将csv中的列与我的表匹配等所有步骤。似乎工作正常,但当我尝试运行导入时,我得到的结果显示0条记录已上传。
MySQL日志为csv文件中的每一行显示此错误:
- Row import failed with error: ("Field 'createdAt' doesn't have a default value", 1364)
我能够通过Postman成功地将行添加到数据库,但CSV上传不起作用。
我的应用程序是用JavaScript使用Sequelize构建的。我的db.config文件看起来像这样:

module.exports = {
    HOST: "localhost",
    USER: "root",
    PASSWORD: "myPassword",
    DB: "cookbookdb",
    dialect: "mysql",
    pool: {
      max: 5,
      min: 0,
      acquire: 30000,
      idle: 10000
    }
  };

我尝试填充的表的模型如下所示:

const { DECIMAL, STRING, INTEGER } = require("sequelize");

module.exports = (sequelize, Sequelize) => {
  const Region = sequelize.define("region", {

    country: {
      type: Sequelize.STRING
    },
    alpha2Code: {
      type: Sequelize.STRING
    },
    alpha3Code: {
      type: Sequelize.STRING
    },
    lat: {
      type: Sequelize.DECIMAL(8,6)
    },
    lng: {
      type: Sequelize.DECIMAL(9,6)
    }
  });
  return Region;
};

由于'createdAt'列是由MySQL生成的,我不知道是什么原因导致了这一点。'createdAt'列的信息显示它对应于datetime,这是当我通过Postman添加一行时生成的。MySQL显示:
列:createdAt 定义:createdAt datetime
csv文件是来自谷歌的这个国家数据的原始版本:https://github.com/google/dspl/blob/master/samples/google/canonical/countries.csv

hl0ma9xz

hl0ma9xz1#

你可以把这些值添加到你的模块中,因为你还没有告诉版本或整个过程和csv文件,我所知道的一般解决方案是这样的。
只需在模型中添加这些条件即可。

{
timestamps: false,
createdAt: false,
createdAt: false,
}

或者在使用deop命令创建文件后删除列

ALTER TABLE your_table_name
DROP COLUMN createdAt;

你也可以参考这个答案,因为它与你的问题相似。
https://stackoverflow.com/a/39587875/21179012

kuuvgm7e

kuuvgm7e2#

我最终发现,在createdAtupdatedAt列的DEFAULT之前添加NULL解决了我的问题。由于我在使用其他CSV文件以及另一个测试数据库时遇到了同样的问题,因此如果其他人遇到同样的问题,在使用MySQL工作台GUI导入时,这看起来是一个很好的解决方案。

ALTER TABLE regions MODIFY createdAt DATETIME NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE regions MODIFY updatedAt DATETIME NULL DEFAULT CURRENT_TIMESTAMP;

相关问题