如何使用Perl将文本文件加载到MySQL?

时间:2015-12-24 10:04:56

标签: mysql perl

有人能告诉我如何从文本文件中读取数据并使用Perl将其存储在MySQL数据库中吗?

例如:

StudentID Name Dept
1 Chellappa IT
2 Vijay CSE
3 AAA ECE

2 个答案:

答案 0 :(得分:3)

99.9%的时间,此类事情的最佳方法是使用特定于目标数据库的本机批量加载工具。在这种情况下,这将是LOAD DATA INFILE或其命令行等效,mysqlimport

我们可以使用Perl将数据按摩成正确的格式:

$ perl -wlne 'next if $. == 1; s/\s+/\t/g; print;' input.txt > output.txt

然后使用mysqlimport加载它:

$ mysqlimport [options] db_name output.txt

如果您的示例真的像您发布的那样简单,那么您实际上只需为mysqlimport指定一些其他选项即可加载文件:

$ mysqlimport --ignore-lines=1 --fields-terminated-by=' ' [options ...] db_name input.txt

答案 1 :(得分:1)

使用DBI模块连接数据库。读取输入文件并将值拆分并存储到数组中。现在将数组值插入数据库。

这是一种方法(请注意,此代码未经过测试):

#!/usr/bin/perl
use warnings;
use strict;

use DBI;

my $dsn = "DBI:mysql:host=hostname; database=dbname; port=portname";

# database connection 
my $dbh = DBI->connect($dsn,"username","password") or die "Couldn't connect to MySQL server: $!";

my $query = 'INSERT INTO tableName (StudentID,Name,Dept) VALUES (?,?,?)';
my $sth = $dbh->prepare($query) or die "Prepare failed: " . $dbh->errstr();

open my $fh, "<", "file.txt" or die $!;
<$fh>;  #skip header

while (<$fh>)
{
    chomp;
    my @vals = split;
    $sth->execute(@vals);
}
close $fh;