我可以从 csv 文件自动在 mySQL 中创建一个以标题作为列名的表吗?

我可以从 csv 文件自动在 mySQL 中创建一个以标题作为列名的表吗?

我想将带有列标题的 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

相关内容