Ruby 操作 MySQL 及数据库规范 DBI

100 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

一、Ruby 操作 MySQL

Ruby 连接数据库需要通过 mysql2,该库不是 Ruby 自带的标准库,需要通过 gem 进行安装。

gem install mysql2

使用 mysql2 连接数据库时需要提供 MYSQL 数据库的主机地址、用户名、密码和数据库名等参数,通过 Mysql2::Client 创建一个数据库连接。

require 'mysql2'

begin
  client = Mysql2::Client.new(:host => "localhost",
                              :username => "root", :password => "root",
                              :database => "blog", :port => 3306)
  puts "MySQL 数据库连接创建成功,MySQL 版本为:#{client.server_info[:version]}"
rescue Mysql2::Error => err
  puts "连接失败,错误代码为:#{err.errno}, 错误信息为 #{err.error}"
ensure
  client.close if client
end

执行上述代码,输出结果如下:

MySQL 数据库连接创建成功,版本为:8.0.18

使用获取到的 MySQL 数据库连接调用 query 方法执行 SQL

require 'mysql2'

begin
  client = Mysql2::Client.new(:host => "rm-uf67r962043910k193o.mysql.rds.aliyuncs.com",
                              :username => "root", :password => "Abc*123456",
                              :database => "blog_development", :port => 3306)
  puts "MySQL 数据库连接创建成功,MySQL 版本为:#{client.server_info[:version]}"

  client.query("DROP TABLE IF EXISTS `chapters`;")

  # 创建 表
  client.query("CREATE TABLE `chapters` (
                  `id` int(11) NOT NULL AUTO_INCREMENT,
                  `title` varchar(255) NOT NULL,
                  PRIMARY KEY (`id`));")

  # 插入数据
  (1..10).each do |i|
    client.query("INSERT INTO chapters (id, title) values (#{i}, 'Chapter0#{i}');")
  end

  # 读取数据
  res = client.query("SELECT * FROM chapters;")

  res.each do |item|
      puts "id: #{item['id']}, title: #{item['title']}"
  end

rescue Mysql2::Error => err
  puts "连接失败,错误代码为:#{err.errno}, 错误信息为 #{err.error}"
ensure
  client.close if client
end

执行上述代码,输出结果如下:

MySQL 数据库连接创建成功,MySQL 版本为:8.0.18
id: 1, title: Chapter01
id: 2, title: Chapter02
id: 3, title: Chapter03
id: 4, title: Chapter04
id: 5, title: Chapter05
id: 6, title: Chapter06
id: 7, title: Chapter07
id: 8, title: Chapter08
id: 9, title: Chapter09
id: 10, title: Chapter010

mysql2 扩展库中包含了一个 Moudule Mysql2,该 Module 下包含了:

Client 实例的常用方法有:

  • close:关闭数据库连接
  • closed?:判断连接是否关闭
  • query:执行指定的 SQL 语句
  • select_db:选择指定的数据库

Result 实例的常用方法有:

  • each:查询结果的迭代,以数组形式返回
  • count:返回结果中字段的数量
  • fields:数组形式返回字段

Field 实例的常用方法有:

  • name:返回指定字段的名称
  • type:返回执行字段的类型

二、Ruby 数据库规范 DBI

DBI 既 Database Independent Interface,独立于数据库的接口,不过现在 DBI 好像是不维护了,具体的文档可以参考 DBI