mysql - 在perl中将csv上传到mysql

标签 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)
) ENGINE=InnoDB AUTO_INCREMENT=4494 DEFAULT CHARSET=latin1

CSV 文件示例:

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

编辑:

用于获取数组中的所有手机号码。你可以这样做。

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 了解访问结果的各种方式。

关于mysql - 在perl中将csv上传到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25904294/

相关文章:

未找到键 id 时 MySQL 不返回结果

linux - 我如何 grep 查找所有少于 4 个字符的单词?

perl - 如何使用 "or "运算符为变量分配多个值?

PHP mySQL ~回显表和列未正确显示

java.security.AccessControlException : access denied (java. lang.RuntimePermission accessClassInPackage.sun.misc)

linux - 在 linux 中找到序列/排序被破坏的行

linux - 收紧 shell 以防叉弹

bash - 多行 perl 正则表达式在没有 slurp 的情况下替换大文件

perl - 如何在 Perl 中触发并忘记一个进程?

mysql - 需要一个 MySQL 查询来获取未在表中注册的日期