用perl将Csv上载到mysql

用perl将Csv上载到mysql,mysql,linux,perl,csv,Mysql,Linux,Perl,Csv,我是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) ) EN

我是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
4495,Sanchita Mehra,999999999
4496,Rupesh Shewalkar,88888888
4497,Aditya Mishra,111111111
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
4495,Sanchita Mehra,999999999
4496,Rupesh Shewalkar,88888888
4497,Aditya Mishra,111111111

Csv上传应基于手机号码,假设表中已经包含手机111111111,则该行应跳过。表示应使用现有数据检查所有手机号码,如果该行已存在于数据库中,则不应将该行插入数据库,而将其余的插入数据库。

您可以检查该行的计数,以查看数据是否已存在,如果存在,则继续执行下一条语句。该实现是针对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

请参阅
perldoc DBI
了解访问结果的各种方式。

感谢您的回复,我如何处理数组或哈希,这样我就不必每次都选择每个手机号码。对于每次插入的记录,我需要检查数据库中是否存在当前手机号码。我应该如何编写代码,以便一个查询将所有手机号码和存储区放入数组或散列中,插入将基于数组或散列值。如果它存在于数组或散列中,则跳过该行。我已更新了我的答案。有关访问结果的各种方式,请参考perldoc DBI@用户3639608