perl+SQlite模块
发布时间:2020-12-16 00:10:08 所属栏目:大数据 来源:网络整理
导读:在开发处理大量的数据,且数据随机性超强悍(比如网络数据)的系统时,我们总会面临对数据正性的验证的问题, 尤其是当这些系统并非基于数据库、但又具有大量的条件查询的时候,我们常常需要要原始的数据进行统计,再通 过与系统中的值进行比较,来难数据的
在开发处理大量的数据,且数据随机性超强悍(比如网络数据)的系统时,我们总会面临对数据正性的验证的问题, 尤其是当这些系统并非基于数据库、但又具有大量的条件查询的时候,我们常常需要要原始的数据进行统计,再通过与系统中的值进行比较,来难数据的正确性,但可条件的灵活,以至手工的计算是苦不堪言的,大家还是喜欢将数据 导入到数据库系统中再用SQL语句来验证数据的正确性。 下面这段代码是为了将几个数据文件读入到SQLITE中,并创建相应的数据库文件。当在测试系统中,用户的权限受 限的时候,需要将perl相关的一些库放到自己的目录下面。 比如我的目录如下: dongq@DongQ_Lap ~/workspace/test/perl $ tree imp_exp/ imp_exp |-- DBD ? ? ? ? ? ?---请自己编译sqlite的perl库代码,然后将目录拷贝过来 | ? |-- SQLite.pm | ? `-- getsqlite.pl |-- auto ? ? ? ? ? ---请自己编译sqlite的perl库代码,然后将目录拷贝过来 | ? `-- DBD | ? ? ? `-- SQLite | ? ? ? ? ? |-- SQLite.bs | ? ? ? ? ? `-- SQLite.so |-- createdb.pl ? ? ? ? ? ---自己的脚本代码 |-- dbitrace.log |-- do.clear |-- dump.db ? ? ? ? ? ? ? --生成的数据库文件 `-- test.dat ? ? ? ? ? ? ? ? --导入的数据 4 directories,9 files dongq@DongQ_Lap ~/workspace/test/perl $? 下面的数据那入的perl代码 #!/usr/bin/env perl #*************************************** # createdb.pl dump1.txt dump2.txt #*************************************** use DBI; use strict; use lib qw( ./. ); #说明库的位置 die "Usage: ./createdb.pl dump1.txt dump2.txt ..." unless $#ARGV >= 0; #建立数据库连接 my $dbh = DBI->connect( "dbi:SQLite:dbname=./dump.db" ); #创建数据表 my $create_sth = $dbh->do( "CREATE TABLE arp_record( ar_hrd INTEGER,ar_pro INTEGER,ar_hln INTEGER,ar_pln INTEGER,ar_op INTEGER,ar_sha VARCHAR(17),ar_spa INTEGER,ar_tha VARCHAR(17),ar_tpa INTEGER )" ); #创建索引 my $index_sth = $dbh->do( "CREATE INDEX idx_ar_sha ON arp_record( ar_sha )" ); $index_sth = $dbh->do( "CREATE INDEX idx_ar_spa ON arp_record( ar_spa )" ); $index_sth = $dbh->do( "CREATE INDEX idx_ar_tha ON arp_record( ar_tha )" ); $index_sth = $dbh->do( "CREATE INDEX idx_ar_tpa ON arp_record( ar_tpa )" ); #插入数据 my $insert_sth = $dbh->prepare( q{ INSERT INTO arp_record VALUES( ?,?,? ) } ); #详细的调试信息 DBI->trace( 1,'dbitrace.log'); $dbh->{ AutoCommit } = 0; my $input_name; foreach $input_name (@ARGV) { open ( CSV,"<$input_name" ) or die "Can't open file: $!"; while( <CSV> ) { chomp; my( $ar_hrd,$ar_pro,$ar_hln,$ar_pln,$ar_op,$ar_sha,$ar_spa,$ar_tha,$ar_tpa ) = split /,/; $insert_sth->bind_param( 1,$ar_hrd ); $insert_sth->bind_param( 2,$ar_pro ); $insert_sth->bind_param( 3,$ar_hln ); $insert_sth->bind_param( 4,$ar_pln ); $insert_sth->bind_param( 5,$ar_op ); $insert_sth->bind_param( 6,$dbh->quote( $ar_sha ) ); $insert_sth->bind_param( 7,$ar_spa ); $insert_sth->bind_param( 8,$dbh->quote( $ar_tha) ); $insert_sth->bind_param( 9,$ar_tpa ); $insert_sth->execute or die $dbh->errstr; } } $dbh->commit or die $dbh->errstr; close ( CSV ); $dbh->disconnect; exit;呵呵,像上面的这种例子网上到处都是:) 参考: <<perl DBI 编程>>一书 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |