有人能告诉我如何从文本文件中读取数据并使用Perl将其存储在MySQL数据库中吗?
例如:
StudentID Name Dept
1 Chellappa IT
2 Vijay CSE
3 AAA ECE
答案 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;