【问题标题】:What ORM to use in one process multiple db connections sinatra application?在一个进程多个数据库连接 sinatra 应用程序中使用什么 ORM?
【发布时间】:2010-04-14 18:19:42
【问题描述】:

已检查 ActiveRecord、DataMapper、Sequel:有些使用全局变量(静态变量),有些需要在使用模型加载源文件之前打开数据库连接。在使用不同数据库的 sinatra 应用程序中使用哪种 ORM 更好。

【问题讨论】:

    标签: ruby database orm sinatra sequel


    【解决方案1】:

    DataMapper 专为多数据库使用而设计。

    您只需说出DataMapper.setup(:repository_one, "mysql://localhost/my_db_name") 之类的内容即可设置多个存储库。

    DataMapper 然后跟踪所有已在哈希中设置的存储库,您可以引用并用于范围界定:

    DataMapper.repository(:repository_one){ MyModel.all }

    (默认范围就是DataMapper.repository,可以通过DataMapper.setup(:default, "postgres://localhost/my_primary_db")等来设置)

    【讨论】:

    • 官方文档可以在datamapper.org/docs/misc.html找到。如果您不指定上下文/存储库,则采用 :default 之一。你至少应该有这样的上下文。
    【解决方案2】:

    似乎可以在大多数 ORM 中使用不同的数据库。 对于 DataMapper,请查看 knowtheory 答案。 对于 Sequel,您可以将数据库处理程序传递给模型:

    class Tag < Sequel::Model(db)
    end
    

    其中 db 是打开的数据库。 对于 ActiveRecord,您可以使用建立连接方法。

    【讨论】:

      【解决方案3】:

      就我个人而言,我更喜欢 Sequel 来访问我的所有 ORM 和基本数据库访问,并且我在 Sinatra/Padrino 以及任何其他需要访问 Rails 之外的数据库时都使用它。

      我使用过 DataMapper,但觉得 Sequel 更简单、更灵活,但也许这正是我的想法。 ActiveRecord 本身就可以,但我认为它与 Rails 结合使用效果最好。

      哪个“更好”?我认为这是主观的,主要与你的大脑如何工作有关。

      【讨论】:

        猜你喜欢
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多