我将在周末与Sinatra一起玩,以评估我公司的一个小型Wiki网站。
我遇到的问题是,我们已经有一个现有的MySQL数据库,其中包含我们所有的信息,供其他进程使用,因此我无法重新创建它并使用数据作为种子,因为那样的话,我会一头雾水两个不同的数据库使用相同的数据进行同步。
谁能给我一个使用Sinatra连接到MySQL数据库的示例类,如何从现有列中提取字段?
这是我的表的一个示例(来自create命令):
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主页顶部的引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句