首页 > 解决方案 > NodeJS 和 MySQL:导入带有关联的 CSV 数据

问题描述

我在网上搜索过,发现可能与我的问题有关,但由于我不明白,我来问这个问题。

我正在尝试将数据插入表中。我正在使用sequelize v6mysql

我的数据库中有什么

我有 2 张桌子,学生和乡镇。

学生表:id, name, email, township_id

乡镇表:id, name

我在我的协会中拥有什么

学生模型

Student.belongsTo(models.Township, {
    foreignKey: "townshipId",
    as: "township",
});

乡镇模式

Township.hasMany(models.Student, {
    foreignKey: "townshipId",
    as: "township",
});

我在 req 中有什么

在我的请求中,我有如下数据:

{
    name: 'john',
    email: 'john@gmail.com',
    township: 'Flank',
}

问题

实际上,我正在尝试将 csv 数据批量插入到我的数据库中。最终用户将使用上述数据(在req中)将数据填充到excel中并保存为csv文件并将其导入系统。问题是我从解析 csv 得到的值是乡镇名称text value,在这种情况下Flank。但我确实需要将其更改为integertownship_id,以便我可以使用该 township_id 插入students表中。

(我所做的是:在这种情况下,我获取乡镇名称Flank并运行 query SELECT township_id FROM townships WHERE name = 'Flank',如果Flank乡镇表中有乡镇名称,我会得到 township_id 。所以,我现在可以使用该 township_id 插入students表中。但我认为它非常成本高昂,另一个事实是我还有另外 50 个这样的字段。)

因此,我的问题是,如何在不先明确找到的情​​况下将其township: 'Flank'插入表中(避免我所做的)。studentstownship_id

谢谢你。

标签: mysqlnode.jssequelize.js

解决方案


问题是我从解析 csv 得到的值是乡镇名称作为文本值,在这种情况下Flank。但我确实需要将其更改为整数township_id,以便我可以将它插入到students表中township_id

为此,而不是

INSERT INTO students (name   , township, ...)
    VALUES           ('John' , 'Flank' , ...)

你必须使用

INSERT INTO students (name   , township_id, ...)
    SELECT            'John' , township_id, ...
    FROM towns
    WHERE town_name = 'Flank';

PS。我不知道如何INSERT .. SELECT在脚本/框架语法中执行。


推荐阅读