您好,欢迎访问一九零五行业门户网

MySQL & Perl, 便利之合_MySQL

perl
by georges tarbouriech
what about this nice pair ?
mysql是一种关系型数据库系统(rdbms),其主页为http://www.mysql.com/。它由gnu gpl发布并供免费使用,请注意阅读版权声明。 它可以在许多平台上工作,既作服务器同时又是客户端。除mysql之外还有一些其它的自由软件性质的rdbms,在这里不作任何比较,本文仅讨论mysql。我们也不将其与那些大型商业数据库像 informix,oracle,sybase等作比,有足够理由相信mysql是internet上使用最广泛的数据库系统之一。在这篇文章里我们使用的mysql版本是3.23.36。现在的稳定发行版本是3.23.46,而苦苦等待的4.0版仍在测试之中。人们可以从网上下载到它们的源代码或包文件。
为了将mysql与perl结合使用,你还需要些东西: perl dbi模块。至少你应该下载dbi, msql-mysql-modules, data-dumper和data-showtable等。
本文不介绍它们的安装过程,因为那很简单,同时包中的说明文件已经提供了你需要知道的所有内容。
perl全称是实用摘录与报告语言(practical extraction and report language)。 最初它用于文件处理(分析,摘要...),很快它的功能就有了扩展。 你几乎可以用它来做任何任何事情:系统管理,cgi脚本程序以及数据库接口程序。
perl包含于许多(如果不能称是全部的话)unix发行版本中,它们中有些是免费的,有些不是。本文写作时,稳定的版本是5.6.1,版本5.7.2在测试中。本文采用的是5.005_03,很不错的一个版本,尽管老点。如果你的机子还没有装perl,你可以从http://www.perl.com/下载。perl提供了许多模块,用它们几乎可以完成任何事,你可以从这个网站的cpan栏目找到它们。
最后一点,为了让这两种软件真正开始工作,你还需要一个web服务器。apache应该是一个不错的选择,它集成于多种unix系统中。如果你还没有,可以到http://www.apache.org/下载。
使用的范例
你也许已经注意到linuxfocus杂志有多种语言的版本。这就意味着作为编辑需要同时管理新文章以及它的译文版本。一般情况下,我们可以看到大约200篇文章,平均每篇文章有5个语言的版本,这样产生了大约1000篇文章并且还在继续增长!这些文章需要被存档,格式标准化,总结及摘要.....应该怎么做这些事?当然,用perl!
我们的总编guido socher编写的许多perl程序使我们的工作变的简单了许多,他写过一本三部头的 perl教程和一本评论perl的书。参照本文末尾的参考文献部分。
javi,我们的西班牙编辑,用perl编写了一个程序来管理翻译进度。
atif是我们的明星作者,他来自perl王国,所以他的母语就是perl。 他同时也撰写关于mysql方面文章,致力于一个web管理工具改进工作。同样你可以在参考文献部分找到他。
总之,如果你在寻找一个perl世界,加入linuxfocus。
我是linuxfocus法文版的编辑之一,我更懒,于是创建了自己的linuxfocus数据库,猜猜用什么: mysql 和perl!
建立数据库
首先你应当已经正确安装了mysql,并配置好用户密码。关于安装并不是本文讨论的内容,mysql自带的大量文档已经描述了所有细节。
用mysql.server启动mysql服务器,这个命令同时调用 safe_mysqld 守护进程,因此你可以给它传参。

mysql -h host -u user -p
连接到服务器,如果服务器就装在你本机上,就不用加参数-h host。
输入密码无误后,你将连接到服务器。现在可以建立自己的数据库了。
在mysql命令提示符状态下输入
create database lf;
,这个是我们的示范数据库(lf代表linuxfocus),你可以根据你的需要命名成别的。接下来就是给用户授权了,当然首先你要有足够的权限(你需要用有administrator权限的用户连接)。如果需要让某个用户管理数据库,通过
grant all on lf.* to username;
给他授权。输入
use lf
选择刚才创建的数据库,并创建一张表。在这里我们创建的表是trissue,命令格式为:
create table trissue (num integer unsigned, category varchar(25), title varchar(40), author varchar(20), en varchar(20), es varchar(20), fr varchar(20),de varchar(20), nl varchar(20), ru varchar(20), tk varchar(20), issue varchar(20));
通过下面的命令可以检查一下我们刚才创建的表内容是否正确
use lf
show tables;
describe trissue;
下面我们需要在表中填入数据,往一张空表中导入数据的最简单的方法就是使用一个带tab分隔符的文本文件。如果文本文件已经准备好,输入
load data local infile maindb.txt into table trissue;
如果你的文本文件没有问题,那么现在这张表就已经填好数据,你可以通过输入以下命令检验一下:
select * from trissue;
这将导致显示一个很长的列表。现在,你就可以进行查询来获得任何类型的数据了。
ok,到现在为止,我们仅仅用了mysql,就可以做任何事情,那么,用perl来做什么?
perl的工作
perl可以帮助我们自动进行查询,将结果显示到一个web浏览器上,等等。重复一遍,首先需要为perl安装正确的模块使之能与mysql联合工作。
现在我们用perl来写一个cgi脚本。它的作用是将perl与html技术结合以实现查询数据库并将结果格式化输出。
我们用一个简单的脚本来查询某一作者的所有文章,显示文章的编号,分类,标题,不同语言版本的翻译者的姓名,发表文章的杂志期号。
你可以将这个脚本当作一个模块使用,但是注意这个例程并不是一个非常可靠的程序。你可以从下面的链接下载到一个有详细注释的版本。=>here
#!/usr/bin/perl -tw
# first, we say this is a tainted perl script.
#
# this is a comment
# db consult
#
# we use the perl dbi module
use dbi;
# as cgi :
use cgi qw(param());
print
content-type: text/html
lfauthors main db
# here comes the button's title for the launching page
下面用脚本去查询数据库。
search by author
author name : type=text size=30 name=author>value=search...>
end_of_start
if (param(author) ne '') {
$author = param(author);
$autsrch.='';
$autsrch.=$author;
$autsrch.='';
# we connect to the database named lf as user doe
$dbh = dbi->connect(dbi:mysql:lf,doe,'');
$sth = $dbh->prepare(
select *
from trissue
where
author = $autsrch
);
$sth->execute;
接着用脚本去显示查询结果。如果我们不限制查询条件,将会显示出数据库的所有内容,如果我们提供一个作者姓名,则会显示出与该作者相关的所有文章。当你的数据库有上千条记录时,不推荐显示出所有内容!
print
num
category
title
author
en
es
fr
de
nl
ru
tk
issue
end_suite
while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) {
print ;
print $num ;
print $category ;
print $title ;
print $author ;
print $e
其它类似信息

推荐信息