Perl 通过其强大的数据库接口模块(DBI)支持与各种数据库的交互,适用于MySQL、PostgreSQL、SQLite等。本文将介绍Perl中数据库连接的基本步骤和常见操作。
目录
1. 数据库连接概述
Perl 使用 DBI(Database Interface)模块作为标准数据库接口,配合特定数据库的驱动(如 DBD::mysql
)实现连接。主要特点:
- 跨数据库支持:只需更换驱动即可。
- 灵活性:支持SQL查询、事务等。
- 模块化:DBI为核心,驱动为扩展。
站内链接:了解模块使用,见 Perl 模块与CPAN。
2. 安装与配置 DBI
安装 DBI
cpan DBI
安装数据库驱动
根据数据库类型安装对应驱动:
- MySQL:
cpan DBD::mysql
- SQLite:
cpan DBD::SQLite
- PostgreSQL:
cpan DBD::Pg
验证安装
use DBI;
print "DBI 版本:$DBI::VERSION\n";
3. 连接数据库
SQLite 示例
SQLite 是一个轻量级数据库,无需独立服务器。
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect("dbi:SQLite:dbname=test.db", "", "", { RaiseError => 1 })
or die $DBI::errstr;
print "连接到 SQLite 成功\n";
$dbh->disconnect;
MySQL 示例
use DBI;
my $dsn = "DBI:mysql:database=testdb;host=localhost;port=3306";
my $user = "username";
my $pass = "password";
my $dbh = DBI->connect($dsn, $user, $pass, { RaiseError => 1, AutoCommit => 1 })
or die $DBI::errstr;
print "连接到 MySQL 成功\n";
$dbh->disconnect;
- $dsn:数据源名称,格式为
DBI:驱动:参数
。 - RaiseError:出错时抛出异常。
4. 执行 SQL 查询
创建表
my $dbh = DBI->connect("dbi:SQLite:dbname=test.db", "", "", { RaiseError => 1 });
$dbh->do("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
print "表已创建\n";
插入数据
$dbh->do("INSERT INTO users (name, age) VALUES ('Alice', 25)");
print "数据已插入\n";
使用占位符(推荐)
防止SQL注入:
my $sth = $dbh->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$sth->execute("Bob", 30) or die $sth->errstr;
print "数据已插入\n";
5. 处理查询结果
简单查询
my $sth = $dbh->prepare("SELECT * FROM users");
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
print "ID: $row->{id}, Name: $row->{name}, Age: $row->{age}\n";
}
$sth->finish;
获取所有行
my $rows = $dbh->selectall_arrayref("SELECT * FROM users", { Slice => {} });
for my $row (@$rows) {
print "ID: $row->{id}, Name: $row->{name}, Age: $row->{age}\n";
}
单行查询
my $row = $dbh->selectrow_hashref("SELECT * FROM users WHERE name = 'Alice'");
print "找到:$row->{name}, $row->{age}\n";
6. 错误处理与事务
错误处理
使用 RaiseError
或手动检查:
eval {
$dbh->do("INSERT INTO users (name) VALUES ('Charlie')");
};
if ($@) {
print "错误: $@\n";
}
事务管理
eval {
$dbh->{AutoCommit} = 0; # 关闭自动提交
$dbh->do("INSERT INTO users (name, age) VALUES ('David', 40)");
$dbh->do("INSERT INTO users (name, age) VALUES ('Eve', 35)");
$dbh->commit; # 提交事务
};
if ($@) {
print "事务失败: $@\n";
$dbh->rollback; # 回滚
}
$dbh->{AutoCommit} = 1; # 恢复自动提交
7. 参考资料
站内链接
- Perl 错误处理 – 异常处理。
- Perl 文件操作 – SQLite文件管理。
- Perl 模块与CPAN – 模块安装。
出站链接
- Perldoc: DBI – 官方DBI文档。
- Perl Maven: DBI – 数据库教程。
- CPAN: DBD::mysql – MySQL驱动文档。
其他资源
- 《Programming the Perl DBI》 – 数据库编程书籍。
- X社区:搜索 #PerlDBI 获取示例。
这篇指南详细介绍了Perl中数据库连接和操作的方法,以SQLite和MySQL为例。如果需要更深入的内容(比如连接池或特定数据库配置),请告诉我!
发表回复