Perl DBI数据库操作

本文概述

  • Perl DBI体系结构
  • Perl DBI连接
  • Perl插入数据库
  • Perl插入绑定值
  • Perl READ数据库
  • Perl UPDATE数据库
  • Perl删除数据库
  • Perl DBI功能
  • 所有句柄的Perl通用方法
在本教程中, 我们将在Perl脚本中看到数据库访问。从Perl 5开始, 数据库应用程序使用DBI模块访问数据库。
使用DBI模块在Perl脚本中访问数据库。 DBI(数据库独立接口)在Perl代码和数据库之间提供了一个抽象层。
DBI是数据库访问模块, 它独立于所使用的实际数据库, 提供变量, 用于一致数据库接口的方法集。
Perl DBI体系结构
Perl DBI数据库操作

文章图片
DBI独立于数据库, 可与Oracle, MySQL等一起使用。DBI通过API(应用程序编程接口)获取所有SQL命令, 并将它们转发给适当的驱动程序以执行。
Perl DBI连接 我们正在使用MySQL数据库。启动你的MySQL服务器。现在完成以下步骤:
  • 创建一个数据库。我们的数据库名称是” perll” 。
  • 在此数据库内创建一个表。我们已经创建了一个带有” 名称” , “ 课程” 和” 费用” 字段的” 用户” 表。
  • Perl模块DBI应该正确安装。
成功创建数据库后, 使用以下脚本将此数据库与Perl文件连接。
#!/usr/bin/perluse strict; use warnings; use DBI; my $driver = "mysql"; my $database = "perll"; my $dsn= "dbi:$driver:database=$database"; my $user= "root"; my $password = ""; my $dbh = DBI-> connect($dsn, $user, $password, {PrintError=> 0, RaiseError=> 1, AutoCommit=> 1, FetchHashKeyName => 'NAME_lc', }); $dbh-> disconnect;

看上面的脚本,
dsn-> 数据库源名称
dbh-> 数据库句柄对象
dsn包含正在加载的数据库。用户为” root” , 我们尚未为数据库设置任何密码。
dbh存储数据库句柄对象调用返回。
数据库断开连接命令是可选的, 当$ dbh超出范围时, 它将自动调用。
Perl插入数据库 通过INSERT操作, 我们会将记录传递到数据库表” users” 中。以下脚本允许在数据库中插入单个记录。你可以使用同一脚本插入多个记录。
按着这些次序:
  • 将API prepare()函数与SQL插入语句一起使用。
  • 使用API?? execute()函数从数据库中选择所有结果。
  • 使用API?? finish()函数关闭代码。
my $sth=$dbh-> prepare("insert into users(name, course, fee) values('john', 'PHP', '9000')"); $sth-> execute(); $sth-> finish();

Perl插入绑定值 当在运行时获取所需值时, 将使用绑定值。要插入数据, 我们调用$ dbh-> do方法。在这里, 我们将(?)作为占位符传递给实际数据的位置。然后是undef, 其后是包含将替换占位符的数据的值。
my $name = 'nisha'; my $course = 'java', my $fee = '10000'; $dbh-> do('INSERT INTO users (name, course, fee) VALUES (?, ?, ?)', undef, $name, $course, $fee);

输出
Name = John, Course = PHP, Fee = 9000 Name = nisha, Course = Java, Fee = 10000

Perl READ数据库 READ记录用于从数据库中获取信息。将一些记录插入数据库后, 我们便可以使用READ查询来获取这些记录。
按着这些次序:
  • 将API prepare()函数与SQL SELECT语句一起使用。
  • 使用API?? execute()函数从数据库中选择所有结果。
  • 使用API?? fetchrow_array()函数一一读取并打印所有结果。
  • 使用API?? finish()函数关闭代码。
# Fetching records from databasemy $sth = $dbh-> prepare("SELECT * FROM users"); $sth-> execute() or die $DBI::errstr; while (my @row = $sth-> fetchrow_array()) {my ($name, $course, $fee) = @row; print "Name = $name, Course = $course, Fee = $fee\n"; }$sth-> finish();

注意:我们在表中插入了更多值以执行操作。 输出
Name = John, Course = PHP, Fee = 9000 Name = nisha, Course = Java, Fee = 10000Name = Jia, Course = C++, Fee = 8000Name = Anuj, Course = Java, Fee = 5000Name = Vishal, Course = PHP, Fee = 8000Name = Rash, Course = Hadoop, Fee = 4000

Perl UPDATE数据库 借助UPDATE操作, 你可以编辑数据库表中存在的信息。
在这里, 我们将为所有在课程中使用” Java” 的学生将” 课程” 列更新为PHP。
按着这些次序:
  • 使用带有条件的SQL UPDATE语句使用API?? prepare()函数。
  • 使用API?? execute()函数从数据库中选择所有结果。
  • 使用API?? finish()函数关闭代码。
my $sth = $dbh-> prepare("UPDATE users SET course = 'PHP' WHERE course = 'Java'"); $sth-> execute() or die $DBI::errstr; $sth-> finish();

输出
Name = John, Course = PHP, Fee = 9000 Name = nisha, Course = PHP, Fee = 10000Name = Jia, Course = C++, Fee = 8000Name = Anuj, Course = PHP, Fee = 5000Name = Vishal, Course = PHP, Fee = 8000Name = Rash, Course = Hdoop, Fee = 4000

查看输出, 所有Java课程都更新为PHP。
Perl删除数据库 执行DE#LETE操作以从数据库中删除一些记录。我们将从表格中删除费用为9000的所有记录。
按着这些次序:
  • 使用带有条件的SQL DELETE语句使用API?? prepare()函数。
  • 使用API?? execute()函数从数据库中选择所有结果。
  • 使用API?? finish()函数关闭代码。
my $fee = 9000; my $sth = $dbh-> prepare("DELETE FROM usersWHERE fee = ?"); $sth-> execute( $fee ) or die $DBI::errstr; $sth-> finish();

输出
Name = nisha, Course = PHP, Fee = 10000Name = Jia, Course = C++, Fee = 8000Name = Anuj, Course = PHP, Fee = 5000Name = Vishal, Course = PHP, Fee = 8000Name = Rash, Course = Hdoop, Fee = 4000

查看输出, 从SQL表中删除所有费用为9000的行。
Perl DBI功能 使用do语句
do语句是在数据库中执行CRUD操作的快捷方式。如果do语句成功, 则返回TRUE, 如果失败, 则返回FALSE。以下是显示do语句脚本的示例。
To INSERT Record, $dbh-> do('INSERT INTO users (name, course, fee) VALUES (?, ?, ?)', undef, $name, $course, $fee); To UPDATE Record, $dbh-> do('UPDATE users SET course = "PHP" WHERE course = "Java"'undef, $course, $course); To DELETE Record, $dbh-> do('DELETE FROM users WHERE fee =9000');

使用COMMIT操作
发出commit命令后, 你将无法取回所做的更改。你可以通过以下方式调用commit命令,
$dbh-> commit or die $dbh-> errstr;

使用ROLLBACK操作
如果要还原操作期间所做的更改, 可以调用回滚API。
$dbh-> commit or die $dbh-> errstr;

使用自动错误处理
通过指定RaiseError选项, DBI将自动处理你的错误。你的程序将在遇到错误而不是运行失败代码时中止。 RaiseError的值可以为1或0。
my $dbh = DBI-> connect($dsn, $user, $password, { RaiseError=> 1 })or die $DBI::errstr;

所有句柄的Perl通用方法 呃
$rv = $h-> err;

它从最后一个称为的驱动程序方法返回本机数据库引擎错误代码, 该方法通常是整数。
在所有DBI方法调用之前, DBI会将$ h-> err重置为undef, 因此该值的寿命很短。
错误
$str = $h-> errstr;

它从最后一个调用的DBI方法返回本机数据库引擎错误消息。这具有smae寿命作为err方法。返回的值可能包含多个由换行符分隔的消息。
要测试错误, 应使用err方法。因为errstr方法可能会为未失败的方法返回成功或警告消息。
跟踪
$h-> trace($trace_settings);

DBI跟踪方法生成运行时跟踪信息, 该信息可用于跟踪DBI程序中的问题。可以将不同的值设置为跟踪级别。
行数
$rv = $h-> rows;

【Perl DBI数据库操作】rows方法返回以前的SQL语句影响的行数。

    推荐阅读