我报名参加金石计划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。