我是perl编程语言的新手。能否指导一下如何将csv上传到mysql数据库。
我有以下表& csv文件格式
创建表格
CREATE TABLE consumeruser (
ConsumerId int(10) NOT NULL AUTO_INCREMENT,
ConsumerName varchar(45) DEFAULT NULL,
ConsumerMobNo varchar(10) DEFAULT NULL,
PRIMARY KEY (ConsumerId)
) ENGINE=InnoDB AUTO_INCREMENT=4494 DEFAULT CHARSET=latin1
Csv文件示例:
4495,Sanchita Mehra,999999999
4496,Rupesh Shewalkar,88888888
4497,Aditya Mishra,111111111
Csv上传应该基于手机号码,假设表格已经包含手机111111111那么该行应该被跳过。意味着所有移动号码都应该用现有数据进行检查,如果已经在数据库中那行不应该插入数据库中。其余的插入数据库。
答案 0 :(得分:0)
您可以检查行的计数以查看数据是否已存在,然后继续显示下一个语句(如果存在)。该实现适用于SQLite,您可以将其更改为MySQL。
#!/usr/bin/perl
use Modern::Perl '2012';
use DBD::SQLite;
use warnings;
my $dbh = DBI->connect("dbi:SQLite:dbname=Consumer");
while(<DATA>){
chomp;
my ($id, $name, $MobNo) = split /,/;
my $query = "select count(*) from consumeruser where ConsumerMobNo = ?";
my $sth = $dbh->prepare($query);
$sth->execute($MobNo);
my $row = $sth->fetch();
next if(@$row > 0);
my $insertStatement = "insert into consumeruser values(?,'?',?)";
$sth = $dbh->prepare($insertStatement);
$sth->execute($id,$name,$MobNo);
}
__DATA__
4495,Sanchita Mehra,999999999
4496,Rupesh Shewalkar,88888888
4497,Aditya Mishra,111111111
4498,Aditya,111111111
编辑:
用于获取阵列中的所有移动号码。你可以这样做。
my @MobileNumbers;
my $mobileNumberQuery = "select ConsumerMobNo from consumeruser";
my $sth = $dbh->prepare($mobileNumberQuery);
$sth->execute();
while(my $row = $sth->fetch()){
push @MobileNumbers, @$row;
}
有关访问结果的各种方法,请参阅perldoc DBI
。