如何解析 CSV 并导入到 MYSQL 问题

Posted

技术标签:

【中文标题】如何解析 CSV 并导入到 MYSQL 问题【英文标题】:How to parse CSV and import to MYSQL issue 【发布时间】:2015-10-12 17:51:45 【问题描述】:

我真的被困在这一刻了..我搜索和研究,我没有找到类似的东西,所以也许我想要的不可行。

我有一个这种格式的 .xls 文件

|contact| col1  |col2  |  col3  |
---------------------------------
|name1   | info1 |info2 | info3  |
|address1|       |      |        |
|phone1  |       |      |        |
|        |       |      |        |
|name2   |       |      |        | 
|address2| info1 |info2 | info3  |
|phone2  |       |      |        |
|        |       |      |        | 
|name_n  | info1 | info2| info3  |
|addres_n|       |      |        |
|phone_n |       |      |        |
----------------------------------

所以我正在考虑创建一个名为contact 的表和另一个名为info 的表。表联系人将包含 id(主键)、姓名、地址和电话作为字段。还有另一个带有 id(主键)、name(外键)、col1、col2 和 col3 的表。这样,如果我想知道名称的详细信息(在表 info 中),我可以转到另一个表并查看所有值。

于是我研究了如何导入这个xls格式的文件,最佳的解决方案是将xls文件转换为逗号分隔的csv文件。

因此,我想使用的代码是(在转换为逗号分隔的 csv 之后)如下:

但重点是我只想做到以下几点:

“信息”表:name1,info1,info2,info3。 “联系人”表:姓名 1、地址、电话 1。

与“信息”表相关

LOAD DATA INFILE '/home/username/myfile.csv' 
INTO TABLE numbers FIELDS TERMINATED BY ';' 
LINES STARTING BY '-' TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(contact,col1,col2,col3);

填表时没问题,因为我只需在要填入表的行的开头添加一个“-”(包含非空字段的行)。

与“联系人”表相关:

这很困难,因为如果我只想获取联系人列,我将不得不添加一些符号然后进行操作。好吧,我想在 name1 的开头添加一个“*”(例如),在 phone1 的末尾添加另一个用于定义 LINE 的边界。但我也想定义字段,这将是一个';'也是。但是,LOAD DATA INFILE 算法也采用空字段。我只想获取包含与“空字符串”/“null”/不同的内容的字段。所以问题是我是否能够说些什么来避免空字符串。因为正如我在mysql DOC 中看到的那样:

空字段值的解释与缺失字段不同:

对于字符串类型,该列设置为空字符串。

对于数字类型,该列设置为 0。

对于日期和时间类型,该列设置为该类型的相应“零”值。请参阅第 11.3 节“日期和时间类型”。

但它并没有说要避免它。 (我的意思是,如果是一个空值,然后传递下一个字段并再次评估,直到找到一个非空值)

我问这个是因为我的想法是面对它它会像这样填充一行: Name1,null,null,null,address1,null,null,null,phone1 等等。

有什么想法吗?

【问题讨论】:

您的 Excel 工作表中是否有 name1,address1,phone1** 3 行? 不,只是那个值。这个:|联系方式| col1 |col2 | col3 |是我的 excel 电子表格中的内容。使用“IGNORE 1 LINES”可以避免 【参考方案1】:

现在只关注联系人,如果您的 excel 电子表格有 4 列,其中columnA 是所有行的N 操作。如果您希望它最终出现在您的真实表中,请将其更改为 Y

您的 csv 现在有 4 列:

行动、姓名、地址、电话

load data infile 进入一个工作台。现在您将数据放入(有些实际上并不需要),insert into select where action='y' 将完成它,从 worktable 到您的 real table

【讨论】:

好的,我想我明白了你的想法。所以首先我可以做我想做的事..但首先我将带有“null”值的csv导入“草稿表”,然后我在那里操作以获取(使用“insert into select”)非空值到真正的桌子。我认为这个选项是其他回复中最可行的一个。谢谢 :=)【参考方案2】:

在 Excel 中,您可以创建两个工作表,第一个包含联系人数据,第二个包含信息数据。这些工作表可以单独导出为 csv 文件。

【讨论】:

我知道,但我有 70 张带有 |contact col1 col2 col3| 的工作表。因此我当然可以手动完成...但我认为这不是那么有效。也许现在是好的,因为我只有 70 个工作表,但想象一下我有 5000000000 个工作表......根本没有效率。

以上是关于如何解析 CSV 并导入到 MYSQL 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 csv 文件导入 mysql 表并自动递增

如何把csv文件批量导入到mysql数据库

几个CSV大文件如何导入mysql数据库,并更新替换对应数据?

如何使用 Spring Boot 将 CSV 文件导入 MYSQL

如何通过 phpmyadmin 将 csv 文件导入 mysql

如何将 CSV 文件导入 MySQL 表?