我在 sqlite3 gem 的帮助下使用 ruby 中的 sqlite3 数据库(我试图在不使用 ActiveRecords 的情况下更好地理解使用 sqlite3 gem)。我在下面有一个 sql 查询:SELECT id FROM contacts WHERE first_name = 'Charles'
我期望它从中返回值'5'
执行
$db.execute('SELECT id FROM contacts WHERE first_name = ?', 'Charles') do |result|
puts result
end
上面将打印“5”,但会返回一个 sqlite3 对象。我似乎无法获得 execute
返回值“5”的方法。询问
$db.query('SELECT id FROM contacts WHERE first_name = ?', 'Charles') do |result|
result.first.first
end
我能得到的最接近的是使用 query
方法返回值 '5'(上图),但这需要 .first.first
这似乎令人费解。有没有更好的方法让我获得所需的值(value)?即也许通过访问 sqlite3 对象?
最佳答案
试试这个
$db.results_as_hash = true
$db.execute('SELECT id FROM contacts WHERE first_name = ?', 'Charles') do |row|
puts row['id']
end
你想要一个方法。做类似的东西
def find_id_by_first_name(first_name)
$db.results_as_hash = true
$db.execute('SELECT id FROM contacts WHERE first_name = ?', first_name) do |row|
return row['id']
end
end
但无论如何,您的查询可能有问题。如果
first_name
没有唯一索引,此查询可能返回多行。所以这种方法没有多大意义。这只是返回第一个匹配结果。
关于ruby - sqlite3 gem的#execute和#query方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41919299/