【问题标题】:Two Questions about ORMs and Database cleaning using the transaction strategy关于ORMs和使用事务策略清理数据库的两个问题
【发布时间】:2013-09-26 17:25:20
【问题描述】:

我正在使用现有的 Cucumber 和 Ruby 套件编写概念验证测试。我为之做这件事的公司有一个堆栈,其中包括 Java 和 DB2 等。

目前使用该数据库的测试会降低我们的测试数据库,由于许多原因,我无法擦除数据库并用映像版本替换它。

我对使用事务策略清理数据库的想法很感兴趣,我正在考虑使用 database_cleaner gem。

似乎 database_cleaner 需要一个 ORM 才能使用。此时我无权访问架构,ActiveRecord 无法使用我的凭据访问它所需的内容。

两个问题:

  1. ORM 是否总是需要访问架构?
  2. 您是否总是需要 ORM 来使用事务策略清理数据库?

如果有人知道可用于 ruby​​ 1.8.7(还没有 jRuby)、windows、DB2 等的可用 gem,这也是一个奖励。

【问题讨论】:

  • 你看过哪些 ORM? Sequel、DataMapper 和 Active Record 是 Ruby 的三大巨头。它们应该与操作系统无关,因为它们是纯 Ruby。他们是否可以连接或运行更多地取决于他们使用的驱动程序以及这些驱动程序是否在您的系统上编译。
  • 内存中的 db 是否会为您的测试工作,而不是使用真正的 db2 数据库?当然你需要创建自己的测试数据。
  • @theTinMan 我试过 Sequel 和 Active Record。 Sequel 似乎也试图在幕后使用 Active Record。我认为我应该只是使用 Active Record...
  • @PeterSchuetze 管理层想要测试真实数据库的行为

标签: ruby orm db2 database-cleaner


【解决方案1】:
  1. ORM 是否总是需要访问架构?

架构?就像在数据库表和关系字段和索引的文本转储中一样?否。他们是否需要能够读取描述表及其关系的数据库的内务管理数据?是的。这就是他们构建模型的方式。

  1. 您是否总是需要 ORM 来使用事务策略清理数据库?

哎呀,不。假设它支持事务,您可以使用它的所有老派并将其写入特定 DBM 的 SQL 中。 ORM 只是让它更便携,通常更容易编写,因为您依赖它来知道如何生成适当的 SQL。

我喜欢 Sequel 用于我的 ORM,因为如果我坚持,我可以使用原始 SQL,否则我可以将它与“数据集”或完整模型和有关它们的关系信息一起使用。另外,它会生成非常好的 SQL,我可以轻松检查。我强烈推荐它。

Active Record 随 Rails 一起提供,因此可能是 Ruby 中最常用的 ORM。这并不意味着它是最好的,这是一个见仁见智的问题,但它很常见。 Active Record 不是孤立于 Rails 使用的;您也可以将它与常规 Ruby 应用程序一起使用,尽管这有点像逆流而上。我过去使用它来将 Ruby 绑定到一个遗留数据库,没有 Rails 层,它工作得很好。

我已经有一段时间没用过DataMapper了,但是我用的时候感觉还不错,推荐看看。每个人的大脑吸收数据的方式都不同,我们喜欢不同的 API,因此我们的 ORM 也多种多样,因此它可能会流入你的大脑,而其他人不愿意去。

【讨论】:

  • 谢谢,Tin man,我真的觉得我可以再试试 Sequel。您是否曾将它与 DB2 一起使用过?
  • 我没有将它与 DB2 一起使用,但那是因为我们没有在内部使用 DB2。 DB2 is supported 不过。我用它通过 TinyTDS 和 Linux 的 ODBC 访问 Sybase 和 MSSQL。让驱动程序工作是困难的部分,但使用 Sequel 效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多