4

我已经通过 sequelize-cli 设置并运行了迁移策略,因此可以正确构建表。它可以使用sequelize db:migrate并且可以很好地创建表格。并将sequelize db:migrate:undo删除该表。

我还包含了插入几条记录的代码(根据此处的 SE 评论)。这也有效。这是所有这些的代码:

'use strict';

module.exports = {
  up: function(queryInterface, DataTypes, done) {
    return queryInterface.createTable('survey', {
      id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
      state: {
        type: DataTypes.TEXT
      },
      age: {
        type: DataTypes.INTEGER
      },
      race: {
        type: DataTypes.TEXT
      },
      gender: {
        type: DataTypes.TEXT
      },
      education: {
        type: DataTypes.TEXT
      },
      q1: {
        type: DataTypes.INTEGER
      },
      q2: {
        type: DataTypes.INTEGER
      },
      .
      .
      .
      q24: {
        type: DataTypes.INTEGER
      },
      q25: {
        type: DataTypes.INTEGER
      }
    }).then(function() {
      queryInterface.sequelize.query("INSERT INTO survey (state, age, race, gender, q1, q7, q24) VALUES ('Texas', 42, 'white', 'female', 5, 4, 3), ('Louisiana', 19, 'hispanic', 'male', 1, 2,5)");
      done();
    });
  },

  down: function(queryInterface, Sequelize) {
    return queryInterface.dropTable('survey');
  }
};

但我有一个包含 3000 多条记录的 CSV 文件,需要用作种子数据。它在db文件夹中并称为survey.csv. 我还有一个seeders文件夹,我认为它是由sequelize init或自动创建的sequelize migration:create。它目前是空的。

可以使用 Excel 中的 concatenate 函数来创建要插入的有序 n 元组数据,然后将这 3000 行粘贴到的 promise 部分up,但这似乎很荒谬。

我找到了类似问题的回复,但在 Rails 中:

您需要 CSV 库。从文档

arr_of_arrs = CSV.read("path/to/file.csv")

这将为您提供一个 2D 数组,您可以根据需要对其进行处理。CSV 类似于IO.read,但有一些额外的功能,例如标头解析。

看起来有少数(或更多) csv节点包,但天哪,它们太复杂了(就像简单命名的csv)。

有没有一种更简单的 csv 解析器(比如 Rails 的解析器)可以用来促进将 csv 转储到数据库中?或者另一种不需要从电子表格复制的大量多余代码的方法?

4

0 回答 0