📜  珀尔 |使用 DBI 管理数据库

📅  最后修改于: 2021-09-08 15:43:04             🧑  作者: Mango

先决条件:

  • Perl 简介
  • 数据库系统

创建数据库程序是 Perl 最常见的用途之一。使用 Perl,我们可以创建健壮的 Web 应用程序以及管理所有数据的数据库。它为接口和广泛的数据库格式提供了出色的支持。为了连接和查询数据库,Perl 提供了一个名为DBI的模块。 DBI 是一种数据库接口,用于与使用结构化查询语言 (SQL)获取数据的数据库服务器进行通信。

在 Perl 中访问数据库通常需要两个步骤。 DBI 模块提供了一个用于数据库访问的API 。程序使用 DBI 的功能来操作数据库。从 Perl 访问数据库的第二阶段是数据库驱动程序 (DBD)模块。每个不同的数据库系统都需要自己的驱动程序。这种方法允许 Perl 数据库应用程序相对独立于它将访问的特定数据库。

安装:要安装 DBI 模块,请打开终端并键入以下命令并按 Enter:

perl -MCPAN -e 'install Bundle::DBI'

这将自动下载并安装 DBI 模块的驱动程序,以提供与 Perl 的数据库连接。

数据库独立接口(DBI)

顾名思义,DBI 为 Perl 程序提供了一个独立的接口。这意味着 Perl 代码不依赖于在后端运行的数据库。 DBI 模块提供了抽象,即我们可以编写我们的代码而不必担心在后端运行的数据库。

要导入数据库独立接口模块的功能,我们需要借助“use”pragma 来导入或包含该模块。 use DBI pragma 允许我们使用DBI 模块来操作我们正在连接的数据库。

连接数据库:

connect()方法用于连接到指定的数据库。它需要三个参数:

  1. 由’:’分隔的三个值组成的字符串,在本例中为“DBI:mysql:test”。第一个值指定我们正在使用 DBI。第二个值指定数据库引擎,在本例中为 MySQL。第三个值指定要连接的数据库的名称。
  2. connect() 方法的下一个参数是用户名。在这种情况下,用户是“root”。
  3. 最后一个参数是本地系统的密码。在这个例子中,它是“密码”

句法:

如果程序无法与数据库建立连接,则“or die”语句将终止程序,并显示错误消息。 errstr()方法返回一个字符串,其中包含连接到数据库时遇到的任何错误。

准备查询:

prepare()方法接受一个参数,即要执行的 SQL 查询。 SQL 查询采用包含 SQL 语句的字符串形式。此 SQL 语句与您将在 MySQL 中执行的 SQL 语句相同。它返回一个称为语句句柄的对象,可用于执行查询。

句法:

现在,查询已准备好执行。请注意,在上面的查询,我们正在创建一个ID,姓名薪水列的

执行查询:

execute()方法执行在prepare()方法中prepare()的查询。它不需要任何参数。使用在执行“准备”语句时创建的语句句柄对象调用它。

句法:

从结果中获取值:

fetchrow()方法用于从执行查询的结果中检索下一行数据。如果执行选择查询,则fetchrow()方法从结果中获取下一行。它从可以分配给变量的结果中返回一行。在 while 循环中使用时,我们可以使用fetchrow()方法获取并显示数据库中的所有行。

句法:

每列的值存储在三个变量中。

fetchrow_array()函数返回一个包含结果行的数组

句法:

断开连接:

执行完所有查询后,我们需要断开连接。这是通过使用disconnect()函数的。这样做允许 Perl 脚本正确终止连接。不与数据库断开连接不会产生任何错误。这样做通常是一种很好的做法。

句法:

在 MySQL 中创建数据库:

MySQL必须安装在您的系统中,并且需要 MySQL 的基本知识。

  • 登录到您的 MySql 服务器
  • 创建一个名为“ test ”的数据库。我们将连接到此数据库,因此请确保
    名称是“测试
  • 确保这个数据库没有表,因为我们将创建一个名为“emp”的表
    将值插入此表

把它们放在一起:

MySQL 中创建数据库后,我们可以在 Perl 中访问该数据库。我们首先在名为 test 的数据库中创建一个 emp 表,其架构为:( id INTEGER PRIMARY KEY, name VARCHAR(10), salary INT, dept INT)。创建表后没有任何错误,我们将值插入表中。
插入值后,我们可以查询表以选择所有行并使用fetchrow()函数将它们显示给用户。

例子:

#!/usr/bin/perl -w
use DBI;
  
# definition of variables
  
# name of the database. In this case,
# the name of the database in my local
# system is test.
  
# user in this case is root
$user = "root";
# this is the password for root
$password = "password"; 
  
# connect to MySQL database
my $dbh = DBI->connect ("DBI:mysql:test",
                        $user,
                        $password) 
                        or die "Can't connect to database: $DBI::errstr\n";
  
print "connected to the database\n";
  
# the test database contains a table called emp 
# the schema : (id INTEGER PRIMARY KEY, 
#               name VARCHAR(10), salary INT, dept INT)
# let us first insert some values
  
# prepare the query to 
# create the emp table
my $sth = $dbh->prepare("CREATE TABLE emp(id INT PRIMARY KEY, 
                                         name VARCHAR(10), 
                                         salary INT, dept INT)");
  
# execute the query
# now, the table is created
$sth->execute();
  
# prepare the query
my $sth = $dbh->prepare("INSERT INTO emp
                        VALUES(?, ?, ?, ?)");
  
# define the variables to be inserted
# into the table
my $id = 1;
my $name = "adith";
my $salary = 1000;
my $dept = 2;
  
# insert these values into the emp table.
$sth->execute($id, $name, $salary, $dept);
  
# insert some more rows into the table.
$sth->execute($id + 1, $name, 
              $salary + 100, $dept - 1);
  
# insert more rows
$sth->execute($id + 2, "Tyrion",
              $salary + 1000, $dept + 1);
  
print "Successfully inserted values into the table\n";
  
# now, select all the rows from the table.
my $sth = $dbh->prepare("SELECT * FROM emp");
  
# execute the query
$sth->execute();
  
# Retrieve the results of a row of data and print
print "\tQuery results:\n================================================\n";
  
# fetch the contents of the table 
# row by row using fetchrow_array() function
while (my @row = $sth->fetchrow_array()) 
{
    print "@row\n";
}
  
# if the function cannot be execute, show a warning.
warn "Problem in retrieving results", $sth->errstr( ), "\n"
if $sth->err();
  
print "\n";
  
# select particular columns. 
  
# prepare the query
my $sth = $dbh->prepare("SELECT name, salary FROM emp");
  
# execute the query
$sth->execute( );
  
# Retrieve the results of a row of data and print
print "\tQuery results:\n================================================\n";
  
while(($name, $sal) = $sth->fetchrow_array()) 
{
    print "Name: $name, salary: $sal\n";
}
warn "Problem in retrieving results", $sth->errstr( ), "\n"
if $sth->err( );
  
# end of program
exit;

输出 :