Ruby 数据库访问 - DBI 教程


Ruby 的数据库访问方式非常丰富,其中最常用的一种是 DBI(Database Independent Interface)。

DBI 是一个标准的 Ruby 库,是一个数据库独立的接口,可以通过一个 API(应用程序接口)访问不同的数据库。使用 DBI 可以很方便地连接到 MySQL、PostgreSQL、Oracle、SQLite、SQL Server 等数据库,不需要对底层数据库进行特定的处理。

下面是一个简单的 DBI 连接 MySQL 数据库的示例:

require 'dbi'

# 设置数据源名称
dsn = "DBI:mysql:database=test;host=localhost;port=3306"

# 连接数据库
dbh = DBI.connect(dsn, "root", "password")

# 查询数据库
sth = dbh.prepare("SELECT * FROM users")
sth.execute

# 遍历结果集
sth.fetch do |row|
  puts row.inspect
end

# 关闭连接
sth.finish
dbh.disconnect

首先需要使用 require 'dbi' 引入 DBI 库。然后定义 dsn 变量,该变量是连接 MySQL 数据库的数据源名称,其中包括数据库名称、主机地址、端口等信息。

然后使用 DBI.connect(dsn, "root", "password") 连接到数据库,其中第一个参数是数据源名称,后面两个参数是连接到数据库所需要的用户名和密码。

接着,使用 dbh.prepare 准备查询语句,然后使用 execute 执行。然后遍历结果集并打印每行数据,最后使用 finish 关闭查询结果集,使用 disconnect 关闭数据库连接。

在 DBI 中还有一些常用的方法,例如 dbh.do 可以执行无返回结果的 SQL 语句,dbh.tables 可以列出数据库中的所有表名,dbh.columns(table) 可以列出指定表的所有字段名。

此外,还可以使用 DBI 中的预处理语句,例如 dbh.prepare("INSERT INTO users(name, email) VALUES(?, ?)"),使用 ? 占位符来在执行时填充实际的值,可以防止 SQL 注入攻击。

DBI 还支持事务处理,例如:

dbh['AutoCommit'] = false # 关闭自动提交
dbh.transaction do |dbh|
  # 向数据库插入数据等操作
end

当然,以上只是 DBI 基本操作的示例,DBI 还有很多高级特性和数据库驱动程序,可以满足各种复杂的数据访问需求。