我在周末使用 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 中的 get
或 post
处理程序中,它将检索记录。这样的事情会让你接近:
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/