【问题标题】:Use existing database and tables with Sinatra and Datamapper?将现有的数据库和表与 Sinatra 和 Datamapper 一起使用?
【发布时间】:2014-03-30 12:12:48
【问题描述】:

我在周末与 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 做我需要的事情,所以任何其他建议/示例都会很棒。如果我有一个从一个类中的多个表中提取的示例,那也很棒。

【问题讨论】:

    标签: mysql ruby sinatra


    【解决方案1】:

    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 中的 getpost 处理程序中,它将检索记录。这样的事情会让你接近:

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

    【讨论】:

    • 这正是我所需要的。谢谢。
    • 您会发现 Sequel 是一个很棒的工具。根据您的数据库需求,学习使用 Sequel 的模型对您来说可能是一个非常强大的工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2020-11-26
    • 2012-07-10
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多