【发布时间】:2020-07-31 17:29:04
【问题描述】:
我在网上搜索了this,这可能与我的问题有关,但由于我不明白,所以我来问这个。
我正在尝试将数据插入表中。我正在使用sequelize v6 和mysql。
我的数据库中有什么
我有 2 张桌子,student 和 township。
学生桌: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 并运行查询SELECT township_id FROM townships WHERE name = 'Flank',如果Flank 存在于 townships 表中,我将返回 township_id。所以,我现在可以使用它township_id 插入到students 表中。但我认为它非常昂贵,另一个事实是我还有另外 50 个这样的字段。)
因此,我的问题是,如何在不首先明确找到 township_id 的情况下将 township: 'Flank' 插入到 students 表中(避免我所做的事情)。
谢谢。
【问题讨论】:
-
你想在
township表中创建一个新乡镇,在student表中创建一个新学生,以及他们的关系吗? -
没有。我想插入关联。实际上,我正在通过系统导入 CSV。在 CSV 中,最终用户将从下拉列表中选择乡镇名称。所以我从解析 CSV 中得到的值就像我在问题中的 req 一样。但是当我实际将该数据插入学生表时,我需要映射或关联与 Flank 均衡的 township_id 并插入它。 @slideshowp2
-
不确定,但也许this thread 可以帮助您。不是在运行时处理数据(在处理和插入时),而是从源头修复问题并修复下拉行为,以便用户选择文本但在工作表中选择 id。
-
@RaghavGarg 谢谢。我是这样想的,但我不确定将这些数据放在 Excel 中是否合适(我的意思是隐藏那些真实的数据列,因为最终用户可能会不小心删除该列或其他任何内容)并且当我搜索时网上,我找到了this question,它在模型内部进行映射。所以,我想知道如何在续集中实现这一点。不过谢谢你的评论。
-
此方法可能不适用于大型数据集,但您可以使用单个 SQL 查询将乡镇的完整数据加载到内存中,并将其转换为以乡镇名称为键的哈希,以便每个学生记录都只能从内存中获取 O(1) 中的 township_id。
标签: mysql node.js sequelize.js