mysql - 将现有数据库和表与 Sinatra 和 Datamapper 一起使用?

标签 mysql ruby sinatra

我在周末使用 Sinatra 来评估它是否适合我公司的小型 wiki 站点。

我遇到的问题是,我们已经有一个现有的 MySQL 数据库,其中包含我们所有的信息,其他进程使用它,所以我无法重新创建它并用数据播种它,因为那样我就会有保持两个不同数据库与相同数据同步的困惑。

谁能给我一个使用 Sinatra 连接到 MySQL 数据库的示例类,以及如何从现有列中提取字段?

这是我的表的示例(来自创建命令):

CREATE TABLE `serverinfo` (
  `DB` CHAR(10) NOT NULL,
  `SERVERNM` CHAR(30) NOT NULL,
  `INSTANCE` CHAR(30) NOT NULL,
  `LOCATION` CHAR(2) NOT NULL,
  `ROLE` CHAR(15) NOT NULL,
  `HOST` CHAR(180) NOT NULL,
  `STATUS` CHAR(1) NOT NULL DEFAULT 'A',
  PRIMARY KEY (`DB`, `SERVERNM`, `INSTANCE`, `LOCATION`, `ROLE`, `HOST`)
)

我不确定我是否可以使用 Datamapper 做我需要的事情,所以任何其他建议/示例都会很棒。如果我有一个从一个类中的多个表中提取数据的示例,那就太好了。

最佳答案

Sinatra 没有提供与数据库对话的功能。您可以使用 mysql2 gem 与数据库对话,但我强烈建议您查看 Sequel ,这是一个非常灵活和强大的 ORM,它使得与遗留数据库的对话变得非常容易。

翻看README , 和 Cheat Sheet您将清楚连接到现有数据库是多么容易,而无需担心修改它。

这当然是未经测试的,但这是建立连接并从现有数据库中检索记录所需的基本步骤:

require 'sequel'
DB = Sequel.connect('mysql2://your_DB:credentials@host/table')
foo = DB[:serverinfo].select(:DB, :SERVERNM).where(:STATUS => 'A').first

将上面的代码包装在 Sinatra 中的 getpost 处理程序中,它将检索记录。这样的事情会让你接近:

require 'sequel'
require 'json'

DB = Sequel.connect('mysql2://your_DB:credentials@host/table')

get '/' do
  content_type :json
  foo = DB[:serverinfo].select(:DB, :SERVERNM).where(:STATUS => 'A').first
  foo.to_json # would return the hash to the browser
end

就使用 Datamapper 而言,请阅读 Sequel 主页顶部的引述。

关于mysql - 将现有数据库和表与 Sinatra 和 Datamapper 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738801/

相关文章:

ruby-on-rails - 使用 Sidekiq 和模块命名模式时的循环依赖问题

ruby - Booking.com 使用 Mechanize 登录

ruby-on-rails - Ruby On Rails TCPSocket

ruby - 是否可以在 Sinatra 中重写基本 URL?

php - 引号字符在数据库中的存储

c# - 使用可能为空的列表通过 EF6 进行查询

mysql - 如何从3台不同的计算机同步Mysql数据库?

mysql - 实时查询数据库发送命令

Ruby:Resque 立即排队

Ruby 时间段类