如何用Perl访问SQLite数据库

简介:

SQLite是一个零配置、无服务端、基于文件的事务型数据库系统。由于它的轻量级,自包含和紧凑的设计,所以当你想要集成数据库到你的程序中时,SQLite是一个非常不错的选择。在这篇文章中,我会展示如何用Perl脚本来创建和访问SQLite数据库。我演示的Perl代码片段是完整的,所以你可以很简单地修改并集成到你的项目中。

访问SQLite的准备

我会使用SQLite DBI Perl驱动来连接到SQLite3。因此你需要在Linux中安装它(和SQLite3一起)。

Debian、 Ubuntu 或者 Linux Mint

 
  1. $ sudo apt-get install sqlite3 libdbd-sqlite3-perl

CentOS、 Fedora 或者 RHEL

 
  1. $ sudo yum install sqlite perl-DBD-SQLite

安装后,你可以检查SQLite驱动可以通过下面的脚本访问到。

 
  1. #!/usr/bin/perl
  2. my @drv = DBI->available_drivers();
  3. print join("\n", @drv), "\n";

如果你运行脚本,你应该会看见下面的输出。

 
  1. DBM
  2. ExampleP
  3. File
  4. Gofer
  5. Proxy
  6. SQLite
  7. Sponge

Perl SQLite 访问示例

下面就是Perl访问SQLite的示例。这个Perl脚本会演示下面这些SQLite数据库的常规管理。

  • 创建和连接SQLite数据库
  • 在SQLite数据库中创建新表
  • 在表中插入行
  • 在表中搜索和迭代行
  • 在表中更新行
  • 在表中删除行
 
  1. use DBI;
  2. use strict;
  3. # 定义数据库名称和驱动
  4. my $driver = "SQLite";
  5. my $db_name = "xmodulo.db";
  6. my $dbd = "DBI:$driver:dbname=$db_name";
  7. # sqlite 没有用户名密码的概念
  8. my $username = "";
  9. my $password = "";
  10. # 创建并连接到数据库
  11. # 以下创建的文件名为 xmodulo.db
  12. my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 })
  13. or die $DBI::errstr;
  14. print STDERR "Database opened successfully\n";
  15. # 创建表
  16. my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK
  17. (ID INTEGER PRIMARY KEY AUTOINCREMENT,
  18. HOSTNAME TEXT NOT NULL,
  19. IPADDRESS INT NOT NULL,
  20. OS CHAR(50),
  21. CPULOAD REAL););
  22. my $ret = $dbh->do($stmt);
  23. if($ret < 0) {
  24. print STDERR $DBI::errstr;
  25. } else {
  26. print STDERR "Table created successfully\n";
  27. }
  28. # 插入三行到表中
  29. $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
  30. VALUES ('xmodulo', 16843009, 'Ubuntu 14.10', 0.0));
  31. $ret = $dbh->do($stmt) or die $DBI::errstr;
  32. $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
  33. VALUES ('bert', 16843010, 'CentOS 7', 0.0));
  34. $ret = $dbh->do($stmt) or die $DBI::errstr;
  35. $stmt = qq(INSERT INTO NETWORK (HOSTNAME,IPADDRESS,OS,CPULOAD)
  36. VALUES ('puppy', 16843011, 'Ubuntu 14.10', 0.0));
  37. $ret = $dbh->do($stmt) or die $DBI::errstr;
  38. # 在表中检索行
  39. $stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;);
  40. my $obj = $dbh->prepare($stmt);
  41. $ret = $obj->execute() or die $DBI::errstr;
  42. if($ret < 0) {
  43. print STDERR $DBI::errstr;
  44. }
  45. while(my @row = $obj->fetchrow_array()) {
  46. print "ID: ". $row[0] . "\n";
  47. print "HOSTNAME: ". $row[1] ."\n";
  48. print "OS: ". $row[2] ."\n";
  49. print "CPULOAD: ". $row[3] ."\n\n";
  50. }
  51. # 更新表中的某行
  52. $stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='Ubuntu 14.10';);
  53. $ret = $dbh->do($stmt) or die $DBI::errstr;
  54. if( $ret < 0 ) {
  55. print STDERR $DBI::errstr;
  56. } else {
  57. print STDERR "A total of $ret rows updated\n";
  58. }
  59. # 从表中删除某行
  60. $stmt = qq(DELETE from NETWORK where ID=2;);
  61. $ret = $dbh->do($stmt) or die $DBI::errstr;
  62. if($ret < 0) {
  63. print STDERR $DBI::errstr;
  64. } else {
  65. print STDERR "A total of $ret rows deleted\n";
  66. }
  67. # 断开数据库连接
  68. $dbh->disconnect();
  69. print STDERR "Exit the database\n";

上面的Perl脚本运行成功后会创建一个叫“xmodulo.db”的数据库文件,并会有下面的输出。

 
  1. Database opened successfully
  2. Table created successfully
  3. ID: 1
  4. HOSTNAME: xmodulo
  5. OS: Ubuntu 14.10
  6. CPULOAD: 0
  7. ID: 2
  8. HOSTNAME: bert
  9. OS: CentOS 7
  10. CPULOAD: 0
  11. ID: 3
  12. HOSTNAME: puppy
  13. OS: Ubuntu 14.10
  14. CPULOAD: 0
  15. A total of 2 rows updated
  16. A total of 1 rows deleted
  17. Exit the database

错误定位

如果你尝试没有安装SQLite DBI驱动的情况下使用Perl访问SQLite的话,你会遇到下面的错误。你必须按开始说的安装DBI驱动。

 
  1. Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./script.pl line 3.
  2. BEGIN failed--compilation aborted at ./script.pl line 3.


原文发布时间为:2015-07-06

本文来自云栖社区合作伙伴“Linux中国”
目录
相关文章
|
11天前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
124 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
4天前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
27 6
|
2天前
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
7 1
|
8天前
|
SQL 关系型数据库 数据库连接
探索研究Ruby 数据库访问
【8月更文挑战第31天】
19 1
|
8天前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
10 0
【教程】navicat配合HTTP通道远程连接SQLite数据库
|
14天前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
17天前
|
Java 数据库连接 数据库
java系列之~如何给sqlite数据库添加表
这篇文章介绍了如何在Java中使用SQLite JDBC驱动来连接SQLite数据库,并提供了示例代码来演示如何创建一个新的数据库表。
|
18天前
|
SQL 存储 数据库
SQLite数据库
【8月更文挑战第21天】SQLite数据库
29 3
|
18天前
|
存储 数据库 数据库管理
SQLite数据库的备份
【8月更文挑战第20天】SQLite数据库的备份
76 1
|
23天前
|
C# 数据库
C# 使用 DbDataReader 来访问数据库
C# 使用 DbDataReader 来访问数据库
49 2
下一篇
DDNS