关系数据库原理

实验4:Perl数据库开发


返回主页』『实验1』 『实验2』『实验3』『实验4』 『实验5』『实验6』『实验7』 『实验8』『大作业

Perl在我们生物信息学的应用中,除了序列处理之外,另一个重要的应用领域就是网络数据库开发。本次实验我们 仍然借助前一次建立的数据库DOINT,了解如何应用Perl辅助数据库的开发和应用,尤其是在WEB CGI上的应用。


一、实验目的

  1. 掌握Perl DBI与MySQL连接的方法。
  2. 掌握Perl执行SQL查询的方法。
  3. 应用Perl DBI与CGI。


二、上机实验步骤

  1. 实验环境
    【硬件环境】
    【操作系统】Redhat CentOS 5.7
    【脚本语言】Perl-x.x.x
    【数据库环境】MySQL 5.0.41

  2. 下载并安装Perl DBI模块(module)和MySQL DBD,安装时必须保证你的MySQL Server是正在运行的:

    先下载并安装CPAN module,然后用cpan安装DBI:

    SHELL> perl -MCPAN -e "install DBI"

    DBD::mysql则用源码安装方式安装( 注意修改其中路径):

    SHELL> tar xzvf DBD-mysql-4.011.tar.gz SHELL> cd DBD-mysql-x.xxx SHELL> perl Makefile.PL --libs="-L/opt/mysql/lib/mysql -lmysqlclient -lz" --cflags=-I/opt/mysql/include/mysql --testhost=localhost --testuser=root --testpassword='' --mysql_config=/opt/mysql/bin/mysql_config SHELL> make SHELL> make install

    修改/etc/httpd/conf/httpd.conf,使Apache能支持perl, CGI脚本(加入或者修改以下脚本):

    LoadModule cgi_module modules/mod_cgi.so ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" AddHandler cgi-script .cgi .pl

    用命令“service httpd restart”重启Apache服务后,修改才能起作用。现在你可以用 将你的cgi脚本放入/var/www/cgi-bin目录后,即可http://localhost/cgi-bin/your_script.cgi执行 你的CGI脚本,例如test.cgi:

    #!/usr/bin/perl use CGI qw/:standard/; # equivalent to using namespace std; print header, start_html("A simple example"), h1("A simple example"), start_form, "What's your name?", textfield(name),p, "What's the combination?", p, checkbox_group(-name=>cords, -values=>[Jenie, Jeenie, Jinie, Joe], -defaults=>[Jenie, Jinie]),p, "What's your favorite color?", popup_menu(-name=>color, -values=>[red, green, blue, chartreuse]),p, submit, reset, end_form, hr; if (param()) { my $name = param(name); my $self_url = url(-path_info=>1, -query=>1); my $keywords = join("/", param(cords)); my $color = param(color); print "Hello, everyone. My name is ", em(escapeHTML($name)),p, "I have daughters: ", em(escapeHTML($keywords)),p, "And, my favorite color is ", em(escapeHTML($color)),p, "My request: ", em(escapeHTML($self_url)), hr; exit(0); }
  3. Perl DBI执行SQL查询的4个步骤
    1. 调用connect()方法初始化数据库句柄。connect()方法接收连接参数并作为字符串, 包括数据库类型("mysql"),主机名("localhost"),以及数据库名、数据库用户和 密码等变量。
    2. 建立SQL查询字符串,并使用[do()]或者[prepare()和execute()]方法执行查询语句。 do()方法是针对于一次性的INSERT,UPDATE或者DELETE操作,而prepare()和execute() 主要针对的则是SELECT查询。使用这些方法得到的对象将有所不同,这取决于查询的类型 以及查询是否成功。成功的查询将返回一个结果对象,而INSERT/UPDATE/DELETE则返 回一些相关的行。而不成功的查询将返回一个错误信息。
    3. 对于SELECT查询,结果对象将进一步处理提取数据。函数fetchrow_hashref()和函数fetchrow_array()分别 返回哈希引用和数组。
    4. 查询结束后,调用disconnect()方法结束会话。

  4. Perl执行SQL查询的例子
    #!/usr/bin/perl -wT # load module use strict; use DBI; # parameters my ($host, $dbname, $username, $password) = () # connect my $dbh = DBI->connect("DBI:mysql:database=$dbname;host=$host", "$username", "$password") || die "connection failed: ". DBI->errstr; # execute INSERT query using do() my $rows = $dbh->do("INSERT INTO users (id, username, country) VALUES (4, 'jay', 'CZ')"); print "$rows row(s) affected "; # execute INSERT query using prepare() from standard input delimited by comma my $sth = $dbh->prepare(q{INSERT INTO users (id, username, country) VALUES (?, ?, ?)}); print "input the records you want to insert, stop with ENTER:"; while ($inputdata=<>) { chop $inputdata; last unless($inputdata); my ($id, $name, $country) = split(/,/, $inputdata); $sth->execute($id, $name, $country); } # execute SELECT query my $sth = $dbh->prepare("SELECT username, country FROM users"); $sth->execute(); # iterate through resultset # print values while(my $ref = $sth->fetchrow_hashref()) { print "User: $ref->{'username'} "; print "Country: $ref->{'country'} "; print "---------- "; } # another kind of iteration, resultset as array print "User\t Country\n"; while (my @data = $sth->fetchrow_array()) { print "$data[0]\t $data[1]\n"; } # clean up $dbh->disconnect();
  5. 上机任务
    1. 参考Mastering Perl for Bioinformatics第六章内容,并完成该章课后练习。
    2. 以DOINT数据库为例,写一个perl脚本,以pfam ID作为参数,列表显示与该domain相互作用的domain,并将结果输出到一个目标文件。
    3. 利用perl CGI写一个页面,根据用户的输入domain id或者名称返回与该domain相互作用的domain列表,并统计该domain的可能功能信息。
    4. 从客户端上传fasta文件到服务器端,保证每个fasta文件只包含一条生物序列。上传示例程序
    5. 根据上传序列的内容自动选择blast程序,执行blast分析,目标数据库为蛋白数据库nr.04。
    6. 将每次的blast分析的结果保存入数据库,保存内容包括检索序列名称,目标数据库名称,以及对应的blast结果文件名
    7. CC MF BP N.A.
      domain001 10(50%) 3(15%) 6(30%) 1(5%)
      ... ... ... ... ...

三、实验报告

完成以上练习,并将实验报告以rar附件的形式发送到ricket.woo AT gmail.com,文件名为5090809XXXlab4.rar。实验报告的内容 应包括实验环境,实验内容和结果讨论以及HTML/CGI源程序。报告提交的截至日期是2012年5月3日。