检查 ActiveRecord、DataMapper、Sequel:有些使用全局变量(静态变量),有些需要在加载带有模型的源文件之前打开数据库连接。在使用不同数据库的 sinatra 应用程序中使用什么 ORM 更好。
3 回答
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")
等来设置)
似乎可以在大多数 ORM 中使用不同的数据库。对于 DataMapper,请查看 knowtheory 答案。对于 Sequel,您可以将数据库处理程序传递给模型:
class Tag < Sequel::Model(db)
end
其中 db 是打开的数据库。对于 ActiveRecord,您可以使用建立连接方法。
就我个人而言,我更喜欢 Sequel 来访问我的所有 ORM 和基本数据库访问,它是我与 Sinatra/Padrino 以及任何其他需要访问 Rails 之外的数据库时使用的。
我使用过 DataMapper,但觉得 Sequel 更简单、更灵活,但也许这就是我的想法。ActiveRecord 本身就可以,但我认为它与 Rails 结合使用效果最好。
哪个更好”?我认为这是主观的,主要与你的大脑如何工作有关。