NAME

SimpleDBI some function base DBI

support mysql

TOOL

query_db.pl

export data from database, write into csv file: 导出数据,写入csv文件

query_db.pl -t mysql -h localhost -u someusr -p somepasswd -d somedb -e 'select * from sometable limit 20' -f some.csv

-e  sql command, 待执行的sql命令

-t  database type, 数据库类型
-h  host, 主机
-u  user, 用户
-p  password, 密码
-P  port, 端口
-d  database name, 数据库
-f  output filename / load filename, 导出/导入 数据文件名
-s  column sep char, 分隔符
-c  database charset, 数据库表编码
-H  write head column name, 是否写表头

load_table.pl

load csv data into database : 把csv里的数据导入指定数据库表

load_table.pl -t mysql -h localhost -u someusr -p somepasswd -d somedb -T sometable -f some.csv -F column_a,column_b -R 1 -s ','

-T  table, 数据表名
-F  field, 导入数据的列名,多个列以半角,号分隔
-R  replace,是否覆盖写入
-H  skip head line,是否跳过首行

FUNCTION

new

use SimpleDBI;
use Encode;
use utf8;

my $dbi = SimpleDBI->new(
    type => 'mysql', 
    db     => 'testdb',
    host   => '127.0.0.1',
    usr    => 'someusr',
    passwd => 'somepwd',
    #enable_utf8 => 1, 
);

query_db

my $data = $dbi->query_db('select * from sometable limit 2', 
result_type => 'arrayref',  # arrayref, hashref, file

#attr => ..., # sql query attr, 
#bind_values => ..., # sql query bind values, 

#hash_key => [ qw/id prov/ ],  #hashref key 

#file => 'sometable.txt',  # file name
#sep => ',', 
#write_head => 1, 
);

print encode( 'utf8' , $_ ), "\n" for @{ $data->[0] };

load_table

if no set field, will auto read first line as field, and set skip_head =1 when load data

如果没有指定field,默认读入首行做为列名,并且在导入时自动跳过

my $test_file = 'xxx.txt';
my $test_data = [ [qw/1 测试/], [qw/2 无聊/], ];
$dbi->load_table(
    $test_data, # or $test_file, 
    table   => 'testtable',
    field  => [qw/id name/],

    #skip_head=> 0,   
    #db  => 'otherdb',
    #charset => 'utf8',
    #replace => 0, 

    #sep => ',', 
);