在ruby中解析sqlite3查询响应

时间:2018-02-04 17:19:43

标签: ruby sqlite

我正在尝试使用sqlite3 gem在Ruby中读取和解析sqlite3查询。这个数据库已存在于我的机器上。

我打开数据库 db = SQLite3::Database.new "/path to/database.sqlite"

我正在执行我的特定查询 db.execute( "SELECT * FROM `ZSFNOTE` WHERE `ZTRASHED` LIKE '0'" ) do |row|

现在,基于我的(有限的)经验,我希望这可以像JSON响应一样进行解析,我可以在其中调用类似row["ZTITLE"]的内容。但是,我的回复中没有这些标题,我只能通过猜测整数来获得我正在寻找的内容,例如row[19]

我知道我甚至没有抓住sqlite3宝石的表面,但在文档中找不到答案。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用#execute2来获取标题。

require 'sqlite3'
db = SQLite3::Database.new(':memory:')
db.execute 'CREATE TABLE "examples" ("header" varchar(20), "value" integer(8))'
db.execute 'INSERT INTO examples(header, value) VALUES("example", 1)'
db.execute2('select * from examples')
# => [["header", "value"], ["example", 1]]

您可以将标题映射到列,如下所示:

headers, *rows = db.execute2('select * from examples')
rows.map! do |row|
    row.each_with_index.with_object({}) do |(col, i), o|
        o[headers[i]] = col
    end
end

rows.each do |row|
    p row['header']
end

# => "example"