如何使用Ruby访问各种数据库?

时间:2015-12-10 20:45:53

标签: ruby

我在Ruby中构建一个模块,用于从各种数据库中的源表中读取元数据。 我写了一个小程序来测试PostgreSQL:

#!/usr/bin/ruby
require 'pg'
begin
  puts "start"
  puts 'Version of libpg: ' + PG.library_version.to_s
  con = PG.connect(host: 'localhost', dbname: 'rdv_app_dev', user: 'rdv_app', password: 'rdv_app')
  puts con.server_version
  pst = con.exec "SELECT * FROM users"
  pst.each do |row|
    puts "%s %s " % [ row['id'], row['email'] ]
  end
  puts 'There are %d columns ' % pst.nfields
  puts 'The column names are:'
  pst.fields.each do |f|
    puts pst.fnumber(f).to_s + ' ' + f + ' ' + pst.ftype(pst.fnumber(f)).to_s
  end 
rescue PG::Error => e
  puts e.message
ensure
  pst.clear if pst
  con.close if con
  puts "stop"
end

它工作正常,但它使用Postgres特有的功能。我需要让它适用于任何数据库而无需为每个数据库重新编码。

我读过Ruby-DBI,但它看起来已经过时了,因为它没有发展7年。

是否存在使用Ruby访问数据库的通用解决方案?

1 个答案:

答案 0 :(得分:0)

ActiveRecord是目前最受欢迎的广告(请参阅RubyGems stats)。 DataMapper非常相似,但更轻量级,可以更快地更改数据库。我不熟悉sequel

这些gem引入了自己的语法,用于与数据库进行通信,该数据库用于抽象出特定于数据库的实现细节。即像User.where(verified: true).includes(:posts).order(created_at: :desc)这样的查询会列出按最近创建日期排序的用户,并包含他们的帖子(在幕后执行加入)。此Ruby语法将根据您指定的适配器和配置编译为特定于db的代码。

了解Sinatra和DataMapper;有很多教程。

另请参阅Rails以及如何配置Rails以使用MySQL或Postgres而不是(默认)SQLite。您会发现无论您使用哪种代码,ORM(ActiveRecord)代码都不会更改。