perl 连接mysql_[转载]【perl】perl连接MySQL

最近为了简化工作流程,提高工作效率,一直在学习关于如何用perl直接操作数据库。查了很多资料,最后终于尝试成功。虽然学perl已经有一年多了,但最近随着对perl更加深入的了解,才发现perl比我以为的要强大的多。可以说,使用CPAN中的各种perl模块,几乎可以用perl完成任何工作。其实在perl中也有“面向对象”的概念。比如模块中的方法等,这些概念与面向对象的编程语言(如Java)中的概念一样。

以下是整个过程(因为我是在windows下安装的,所以只以windows为例)。

1.安装模块BDI以及DBD::mysql(在ppm中为DBD-mysql)

DBI是对于很多数据库的一个通用接口。这意味着你能编写一个脚本,不用改变就能工作于很多数据库引擎。你需要为每种数据库类型定义了的一个数据库驱动程序(DBD)。对于MySQL,该驱动程序称为DBD::mysql。这两个模块在ppm中都有,ppm也是最快捷的安装方式。其他方式我就不介绍了。

2.加载模块

use

DBI;

3.连接数据库,并得到一个文件句柄

my $user

= xx;

my

$password = 123456;

my

$dsn="DBI:mysql:database=db_name;host=localhost;port=3306";

#看到瘦箭头不要怕,这就是调用了模块DBI中的connect这个方法来连接数据库,方法connect的几个参数在后面的括号中给出,并用逗号隔开。下面是小骆驼中对于瘦箭头的描述:调用方法时的全名,应该由模块的名称(此处称为类或class)、一个瘦箭头(->)以及方法的简短名称构成。看到瘦箭头,就说明这是面向对象的写法,后面是要调用的方法名。

#$dbh表示数据库句柄

my $dbh

= DBI->connect($dsn, $user, $password,

{ RaiseError => 1, AutoCommit => 0 });

4.建表。

连接上数据库后,我们就可以建表了,语句跟直接在mysql中操作相同。

$dbh->do("DROP TABLE IF EXISTS

gene_list"); #如果名为gene_list的表存在,就删除该表。

#建表,该表只有两个字段。do()方法可以直接执行mysql语句,这是用perl来执行mysql语句的一种方法。

$dbh->do("CREATE

TABLE gene_list

(genesymbol VARCHAR(100),

regulation VARCHAR(50)

)") ;

5.导入数据。

表建好了,就可以向表里导入数据了。

#$sth表示语句句柄。这里用了prepare(语句准备),execute(执行)的方法,这是在perl中执行mysql语句的另一种方法。

#这里使用了INSERT语句来向表中导入数据。用while语句直接从输入句柄中得到数据。

#一些驱动器支持占位符和绑定值。这些驱动器允许数据库语句中包含占位符,某些时候也成为参数标记符,指示这些值将在随后提供。在下面的语句中"?"就是占位符,这两个占位符在后面使用$column1,$column2来提供具体的值。

######---------------------------------

my $input =

'gene_list.txt';

open INPUT, "<

$input" or die "cannot open $input: $!";

#######以上这两句用来打开句柄,并读入文件。是perl中的常规操作。

my $sth

= $dbh->prepare("INSERT INTO

gene_list(genesymbol,regulation) VALUES(?,?)");

while (){

chomp();

my ($column1,$column2) = split /t/,$_ ;

$sth->execute( $column1,$column2 );

}

#下面这个语句是必须的,不然无法导入数据。这个语句的具体含义还没有搞清楚,好像是重新连接数据库。

$dbh->commit || die $dbh->errstr;

#下面的语句用来去除导入数据的行尾换行符,其实有上面的chomp()函数,下面的语句是可以省略的。

my

$statement="UPDATE gene_list

SET regulation=REPLACE(regulation,'r','')";

my $rc = $dbh->do($statement) || die $dbh->errstr;

6.查询。

导入数据后,就可以进行相关的查询了。

#这里使用了prepare(),execute()的方式,如果使用do()的话,我们没有返回的句柄,将无法导出查询的值。

$sth =

$dbh->prepare("

SELECT a.*,b.*

FROM gene_list a,signal_net_hsa

b

WHERE a.genesymbol =

b.entry1

");

$sth->execute() or die "$DBI::errstrn";

7.导出查询结果。

my

@row; #定义一个数组来存入一整行的值。

#############------------------------

my

$output = 'relation.txt';

open OUTPUT, "> $output" or die "cannot open $output:

$!";

################以上这两句用来打开输出句柄,

#

fetchrow_array,作为一个字段数组取出下一行,这是固定用法

#将取出来的值存入数组@row,用while得到所有行的值,再由print输出。

while

(@row = $sth->fetchrow_array() ){

print OUTPUT

"$row[0]t$row[1]t$row[2]t$row[3]t$row[4]t$row[5]n" ;

}

#断开数据库连接,关闭文件句柄。

$dbh->disconnect();

close INPUT;

close OUTPUT;

以上为原创。

参考资料:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值