为什么选ref="/tag/2034/" style="color:#3D6345;font-weight:bold;">Perl来处理数据库任务
你在公司里是不是经常要从数据库导出一堆数据,再手动整理成报表?或者每天都要跑同样的SQL查询,复制粘贴结果发给同事?这些重复操作其实一条Perl脚本就能搞定。别看Perl这门语言年纪不小,但在数据库自动化这块依然好用得很。
很多老系统后台还跑着Perl脚本,因为它对文本处理特别顺手,和数据库打交道也简单。比如你用MySQL或PostgreSQL,Perl通过DBI模块连过去,几行代码就能查数据、改记录、批量导入导出。
安装Perl和DBI模块
现在的Linux和macOS系统基本都自带Perl,Windows用户可以装Strawberry Perl,一键配置好环境。打开终端输入 perl -v 能看到版本号就说明装好了。
接下来装数据库支持模块。比如你要连MySQL,用这条命令:
cpan install DBI
cpan install DBD::mysql如果是PostgreSQL,就把 DBD::mysql 换成 DBD::Pg。装完就能写脚本了。
写个简单的查询脚本试试
假设你本地有个MySQL数据库,里面存着销售记录。你想每天早上自动查昨天的总销售额,发邮件通知团队。先写个基础查询脚本:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
# 连接数据库
my $dbh = DBI->connect(
"DBI:mysql:database=sales_db;host=localhost",
"username", "password",
{ RaiseError => 1, AutoCommit => 1 }
);
# 执行查询
my $sth = $dbh->prepare("SELECT SUM(amount) FROM orders WHERE date = CURDATE() - INTERVAL 1 DAY");
$sth->execute();
my ($total) = $sth->fetchrow_array();
print "昨日销售额:$total\n";
$sth->finish();
$dbh->disconnect();保存为 sales_report.pl,终端里运行 perl sales_report.pl 就能看到结果。第一次可能觉得语法怪怪的,$符号满天飞,但写几个脚本就习惯了。
处理查询结果更灵活
光打印数字不够用?可以把结果写进CSV文件,方便Excel打开。加上这几句:
use Text::CSV;
my $csv = Text::CSV->new({ binary => 1, auto_diag => 1 });
open my $fh, ">:encoding(utf8)", "yesterday_sales.csv" or die "无法创建文件: $!";
$csv->print($fh, ["日期", "总金额"]);
$csv->print($fh, ["CURDATE()-1", $total]);
close $fh;这样每次运行脚本都会生成一个CSV,直接发给财务也没问题。
让脚本自己定时跑
写好了脚本,总不能每天都手动执行吧?Linux和macOS可以用crontab让它自动跑。比如每天上午9点执行:
0 9 * * * /usr/bin/perl /home/user/scripts/sales_report.plWindows用户可以用“任务计划程序”,设置触发器和操作路径就行。从此再也不用手动查数据。
刚开始写Perl脚本,不用追求一步到位。先从最简单的查询开始,能跑通就很有成就感。慢慢加上错误处理、日志记录、邮件发送,你的自动化能力就上了一个台阶。