我在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访问数据库的通用解决方案?
答案 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)代码都不会更改。