将CSV行与数据库进行比较

时间:2014-02-11 09:52:57

标签: perl

我必须比较CSV文件中的数据库。 数据库由我制作的脚本填充相同的CSV。

案例是偶尔会在CSV文件中添加或删除行,并且脚本必须再次运行。 发生这种情况时,必须检查它们与数据库相比是否有任何变化。

我希望你们能提供帮助。

我尝试了什么。

#!/usr/bin/perl -w
 use DBI;
 $dbh = DBI->connect('dbi:mysql:perltest','root','password')
 or die "Connection Error: $DBI::errstr\n";
 $sql = "select * from samples";
 $sth = $dbh->prepare($sql);
 $sth->execute
 or die "SQL Error: $DBI::errstr\n";
 while (@row = $sth->fetchrow_array) {
 $I1 = @row[1];
 }

$CSVSep=",";#separator in csv file
$dbh=DBI->connect(qq{DBI:CSV:csv_sep_char=$CSVSep});#create connection to csv file
$dbh->{'csv_tables'}->{'test'}={'file'=>$TMP_Path,'eol'  => "\n"};#Connect the file
my$csv=$dbh->prepare(" SELECT * FROM test");# Get all rows in the csv file
$csv->execute();

while(my @UploadFileLineSplit = $csv->fetchrow_array){
$I2 = @UploadfileLineSplit[1];
}

if ($I1 == $I2){
print "Their Both the Same";
}

else{
print "Their Both Different!";
}

1 个答案:

答案 0 :(得分:0)

您必须依赖行键并提取其中的两组(其中A是CSV文件中的键,而B来自mysql表)

  1. keys from CSV除了keys from mysql
  2. keys from mysql除了keys from CSV
  3. 然后第一组应该插入到mysql中,第二组删除

    enter image description here