ruby - sqlite3 gem的#execute和#query方法的返回值

标签 ruby sqlite rubygems

我在 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/

相关文章:

ruby-on-rails - 解释 Ruby on Rails 中的迭代器语法

ruby-on-rails - Soundcloud API 从播放列表/集中清除轨道

java - 如何在 SQLite 中将 Bundle 放入 blob 列中?

ruby-on-rails - Ruby - mach-o 文件,但是是一个不兼容的架构(have (x86_64), need (arm64e))运行 gem 时抛出错误

ruby - 为什么从 cmd 文件调用 gem.bat 在第一次调用后退出?

ruby - 如何在centos或ruby docker容器中运行ruby gem?

ruby-on-rails - Rails - 理解 application.js 和 application.css

ruby-on-rails - 为 ruby​​ on rails 应用程序生成 WAR 文件

SQL:按优先级排序,但将 0 放在最后

mysql - SQLite 到 MYSQL