分享
 
 
 

MySQL&Perl,便利之合

王朝mysql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有