我有一个散列的散列数组,我对其进行区分,并将其相应地插入到单个表位置,以便它适合列名。代码如下:
my $dsn = "DBI:mysql:saferoute";
my $username = "root";
my $password = "password";
my %attr = (PrintError=>0,RaiseError=>1);
my $dbh = DBI->connect($dsn,$username,$password,\%attr);
while (my ($year, $year_ref) = each(%$stat) ){
while (my ($state, $state_ref) = each(%$year_ref) ){
while (my ($city, $city_ref) = each(%$state_ref) ){
foreach my $crime_ref (@$city_ref){
while (my ($crime, $crime_stat) = each (%$crime_ref) ){
my $sql = qq|INSERT INTO LOCATION (COUNTRY, STATE, DISTRICT, CITY, LOCALITY_NAME, PIN_CODE, SAFETY_RANKING) VALUES ('IN', '$state', '$city', '$city', 'city', '11111', 1)|;
my $stmt = $dbh->do($sql);
}
}
}
}
}
$dbh->disconnect();
代码运行良好并相应地插入数据。但每当我运行上面的脚本时,它都会填充数据。例如,我第一次运行它时,它会创建 1000 行,下次它会创建 2000 行,依此类推。有关如何阻止它的任何建议,以便不会将相同类型的数据插入到单独的行中。谢谢。
最佳答案
- 添加条件语句
- 从 SQL 中提取已生成的数据
- 检查它是否等于您插入的内容
- 如果数据!=数据插入
还有一些您可能也感兴趣的模块 类::DBI、Rose::DB、DBIx::Class
看看这些...可能会让你的生活更轻松...祝你好运 Perl ORM database module comparison
关于mysql - Perl 防止相同的数据 INSERT 到 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578774/