ruby - 如何在 Sequel ORM 中将行作为数组(而不是哈希)获取?

标签 ruby sequel

Sequel Ruby 的 ORM,Dataset 类有一个 all 方法,它生成一个行散列数组:每一行都是一个以列名作为键的散列。

例如,给定一个表 T:

a  b   c
--------------
0  22  "Abe"
1  35  "Betty"
2  58  "Chris"

然后:

ds = DB['select a, b, c from T']
ah = ds.all # Array of row Hashes

应该产生:

[{"a":0,"b":22,"c":"Abe"},{"a":1,"b":35,"c":"Betty"},{"a":2,"b":58,"c":"Chris"}]

Sequel 中是否有一种方法可以代替生成行数组的数组,其中每一行都是一个仅包含每一行中的值的数组,按照查询中指定的顺序select_rows 在 ActiveRecord 中是如何工作的?像这样:

aa = ds.rows # Array of row Arrays

这会产生:

[[0,22,"Abe"],[1,35,"Betty"],[2,58,"Chris"]]

注意:表达式:

aa = ds.map { |h| h.values }

生成一个数组数组,但不保证行中值的顺序与原始查询中请求的顺序相匹配。在此示例中,aa 可能如下所示:

[["Abe",0,22],["Betty",1,35],["Chris",2,58]]

最佳答案

旧版本的 Sequel(2.0 之前)在某些适配器中能够返回数组而不是散列。但它引起了很多问题,没有人使用它,我也不想维护它,所以它被删除了。如果你真的想要数组,你需要下降到连接级别并使用特定于连接的方法:

DB.synchronize do |conn|
  rows = conn.exec('SQL Here') # Hypothetical example code
end

您需要的实际代码取决于您使用的适配器。

关于ruby - 如何在 Sequel ORM 中将行作为数组(而不是哈希)获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750869/

相关文章:

ruby-on-rails - TypeError (nil 不能被强制转换为 Float) :

android - 移动应用程序的第三方 OAuth 注册和登录集成

ruby - 确保后台工作人员还活着并在工作

mysql - 如何使用 Ruby 的 Sequel 工具包更新 MySQL 数据库中的一行?

ruby - 如何在 Sequel 中创建准备好的插入语句?

ruby - Sequel数据库如何使用 "select * FROM"方法?

ruby - 如何从现有的 postgres 表转储创建 Sequel 迁移?

ruby - 为什么 String#chomp 是这样命名的

ruby - 如何在 Sequel Postgresql 迁移中定义 ARRAY 列?

ruby-on-rails - 无法在 Shopify 的应用程序中嵌入网站(X-Frame-Options)