为了账号安全,请及时绑定邮箱和手机立即绑定

将CSV导入mysql表

将CSV导入mysql表

慕姐8265434 2019-09-19 10:43:50
将csv文件上传到mysql表的最佳/最快方法是什么?我想将第一行数据用作列名。发现这个:如何将CSV文件导入MySQL表但唯一的答案是使用GUI而不是shell?
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

您可以直接将MYSQL链接到它并使用以下SQL语法上载信息,而不是编写脚本以从CSV文件中提取信息。


要将Excel文件导入MySQL,请先将其导出为CSV文件。从生成的CSV文件中删除CSV标题以及Excel可能放在CSV文件末尾的空数据。


然后,您可以通过运行以下命令将其导入MySQL表:


load data local infile 'uniq.csv' into table tblUniq fields terminated by ','

  enclosed by '"'

  lines terminated by '\n'

    (uniqName, uniqCity, uniqComments)

正如读取:将CSV文件直接导入MySQL


编辑

对于您的情况,您需要先编写一个解释器,以查找第一行,并将它们指定为列名。


编辑-2

来自MySQL文档的LOAD DATA语法:


该IGNORE number LINES选项可用于忽略文件开头的行。例如,您可以使用IGNORE 1 LINES跳过包含列名的初始标题行:


LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;

因此,您可以使用以下语句:


LOAD DATA LOCAL INFILE 'uniq.csv'

INTO TABLE tblUniq

FIELDS TERMINATED BY ','

    ENCLOSED BY '"'

LINES TERMINATED BY '\n'

IGNORE 1 LINES

(uniqName, uniqCity, uniqComments)


查看完整回答
反对 回复 2019-09-19
?
哔哔one

TA贡献1854条经验 获得超8个赞

这是一个简单的PHP命令行脚本,可以满足您的需求:


<?php


$host = 'localhost';

$user = 'root';

$pass = '';

$database = 'database';


$db = mysql_connect($host, $user, $pass);

mysql_query("use $database", $db);


/********************************************************************************/

// Parameters: filename.csv table_name


$argv = $_SERVER[argv];


if($argv[1]) { $file = $argv[1]; }

else {

    echo "Please provide a file name\n"; exit; 

}

if($argv[2]) { $table = $argv[2]; }

else {

    $table = pathinfo($file);

    $table = $table['filename'];

}


/********************************************************************************/

// Get the first row to create the column headings


$fp = fopen($file, 'r');

$frow = fgetcsv($fp);


foreach($frow as $column) {

    if($columns) $columns .= ', ';

    $columns .= "`$column` varchar(250)";

}


$create = "create table if not exists $table ($columns);";

mysql_query($create, $db);


/********************************************************************************/

// Import the data into the newly created table.


$file = $_SERVER['PWD'].'/'.$file;

$q = "load data infile '$file' into table $table fields terminated by ',' ignore 1 lines";

mysql_query($q, $db);


?>

它将基于第一行创建一个表,并将剩余的行导入其中。这是命令行语法:


php csv_import.php csv_file.csv table_name


查看完整回答
反对 回复 2019-09-19
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

首先在数据库中创建一个表,其中包含csv文件中相同数量的列。


然后使用以下查询


LOAD DATA INFILE 'D:/Projects/testImport.csv' INTO TABLE cardinfo

FIELDS TERMINATED BY ',' ENCLOSED BY '"'

LINES TERMINATED BY '\r\n'


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 584 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信