微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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主页顶部的引用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐