mysql – 使用Sinatra和Datamapper的现有数据库和表?
作者:互联网
我周末和Sinatra一起玩,为我公司的一个小维基站点进行评估.
我遇到的问题是,我们已经拥有一个现有的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主页顶部的引用.
标签:mysql,ruby,sinatra 来源: https://codeday.me/bug/20190624/1279419.html