数据库
首页 > 数据库> > mysql – 使用Sinatra和Datamapper的现有数据库和表?

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,这使得与旧数据库的通信变得非常容易.

查看READMECheat 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