在Ruby中使用sqlite3,是否有办法将每一行作为哈希而不是数组读取?

在Ruby中使用sqlite3,是否有办法将每一行作为哈希而不是数组读取?,ruby,sqlite3-ruby,Ruby,Sqlite3 Ruby,我使用sqlite3的方式如下: db = SQLite3::Database.open "data.db" stm = db.prepare "SELECT * FROM COMPANIES" rs = stm.execute while (row = rs.next) do name = row[1] 也就是说,行是一个数组而不是散列。有没有办法把它读作散列,这样 row[:name] row[:address] 这是数据。这是因为在将来,如果表具有不同的列顺序,行[3]可能

我使用sqlite3的方式如下:

db = SQLite3::Database.open "data.db"

stm = db.prepare "SELECT * FROM COMPANIES"
rs = stm.execute

while (row = rs.next) do
    name = row[1]
也就是说,行是一个数组而不是散列。有没有办法把它读作散列,这样

row[:name]
row[:address]
这是数据。这是因为在将来,如果表具有不同的列顺序,
行[3]
可能会变成
行[5]
,因此
行[:地址]
更加明确。

有一个setter来实现这种行为:

db = SQLite3::Databse.open 'data.db'
db.results_as_hash = true
# ...

效果很好。我想它必须是
行[“NAME”]
,并且不能被设置为
行[:NAME]
?与其使用SQLite gem,我建议使用一种帮助您与DBM特定语言隔离的ORM。SQLite很不错,但是如果您的数据库需要增长,那么必须重写对不同DBM的所有调用是一个很大的痛苦。我喜欢它,因为它非常不可知论,而且非常有能力。这是一个很好的概述。