我想将带有列标题的 CSV 文件中的数据导入数据库。我可以使用 COPY 语句执行此操作,但前提是我首先手动创建一个表,其中为 CSV 文件中的每一列创建一个列。有没有办法根据 CSV 文件中的标题自动创建此表?
下面是将 csv 加载到 mysql 表 t1 中的查询,其中 t1 已在数据库中手动创建
load data local infile "C:\\EQA\\project\\input1.csv"
into table request_table
character set latin1
fields terminated by','
ENCLOSED BY '"'
lines terminated by'\r\n'
IGNORE 1 ROWS
但我实际上希望基于 csv 标头生成表格,这可能吗?这里我的要求是每次当我从其他数据库(如 oracle)导出一些数据时,我都能将其存储到 csv 中,现在我需要将此 csv 导入其他数据库(如 mysql),如果是一次性的,我们可以手动在 mysql 中创建表格,如果我从 oracle 数据库中获取许多 csv 文件怎么办?如果我按照手动创建表格的方式,它会导致更多的复杂性,对吧!有没有更好的案例,如果有,你能帮我吗
答案1
awk 是一个真正令人惊叹的工具,双关语。您应该学习它,因为它是最简单的文本操作脚本语言之一。
这里有一个名为“createtable.awk”的 awk 脚本,可以为您提供一个良好的开端。您必须将 csv 文件的第一行保存到“somefile.csv”,并且只能保存第一行
需要进行少量编辑,您仍然必须指定一个主键,并且每个字段都假定为 varchar(60),因此您可以修改字段类型以适应...
awk -f createtable.awk somefile.csv
查看输出
awk -f createtable.awk somefile.csv > createtable.txt
发送到文件然后复制/粘贴到 SQL 命令中
BEGIN{
FS=","
tablename = "MyTable"
printf("\n DROP TABLE %s IF EXISTS",tablename)
printf("\n CREATE TABLE %s ",tablename)
printf("\n( ")
}
{
#printf("\n NF=%d",NF)
for (i=0; i<=NF; i++)
{
printf("\n %s varchar(60) NOT NULL DEFAULT 'mt', ",$(i))
}
}
END{
printf("\n ); ")
}
答案2
我建议你看看数据转换器(免责声明 - 我是它的开发人员)。它可以将 CSV(和其他)转换为 SQL。生成的 SQL 包含每行的“插入”语句和“创建表”语句。
该应用程序可以离线工作,并且您的数据永远不会离开您的计算机。
您可以从Mac 应用商店或者Microsoft Store。