mysql - NodeJS 和 MySQL:导入带有关联的 CSV 数据
问题描述
我在网上搜索过,发现这可能与我的问题有关,但由于我不明白,我来问这个问题。
我正在尝试将数据插入表中。我正在使用sequelize v6
和mysql
。
我的数据库中有什么
我有 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
。但我确实需要将其更改为integer
township_id,以便我可以使用该 township_id 插入students
表中。
(我所做的是:在这种情况下,我获取乡镇名称Flank
并运行 query SELECT township_id FROM townships WHERE name = 'Flank'
,如果Flank
乡镇表中有乡镇名称,我会得到 township_id 。所以,我现在可以使用该 township_id 插入students
表中。但我认为它非常成本高昂,另一个事实是我还有另外 50 个这样的字段。)
因此,我的问题是,如何在不先明确找到的情况下将其township: 'Flank'
插入表中(避免我所做的)。students
township_id
谢谢你。
解决方案
问题是我从解析 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
在脚本/框架语法中执行。
推荐阅读
- python - Swagger yaml/yml oneOf 不起作用
- python - 如何在 yaml Flux 中序列化一个 python 类
- ssrs-2012 - 创建报告时出现 SSRS 报告问题
- c# - Blazor:从客户端而不是 index.html 开始
- php - PHP 文件下载全部停止在 1GB
- r - 提取 R 中 data.frame 的名称作为字符,而不创建所有 data.frames 的列表,然后从该列表中调用
- r - 闪亮的反应值更新顺序
- spring - 使用spring hibernate在代码中不重复的想法
- android - 在 facebook android 应用程序上单击我的网站链接给出 net::ERR_NAME_NOT_RESOLVED
- r - 将 content_transformer 与 udpipe_annotate 一起使用