ruby - 如何将 Ruby 数组项插入 SQLite?

标签 ruby sqlite

我想执行我的INSERT具有以下数组的 Ruby 文件中的字符串:

names_arr = ["Jack", "Susan", "Peter"]

在同一个 Ruby 文件中,我需要 SQLite3 gem 并拥有以下代码:
names_arr.each do |each_name|
  db.execute('INSERT INTO users (name) VALUES ("#{each_name}");')
end

我在我的“用户”表中期待这个:
id  name
1   Jack
2   Susan
3   Peter

相反,我得到了这个:
id  name
1   #{each_name}
2   #{each_name}
3   #{each_name}

很明显我没有正确插值,但我尝试了很多不同的东西,无法弄清楚我错在哪里。

我正在使用 SQLite3 和 Ruby。

最佳答案

这段代码有几个问题:

names_arr.each do |each_name|
  db.execute('INSERT INTO users (name) VALUES ("#{each_name}");')
end
  • 您正在尝试在单引号字符串中使用 Ruby 的字符串插值,但字符串插值仅适用于双引号字符串(以及 heredocs、%Q{...} 字符串、正则表达式文字等)。
  • 标准 SQL 对字符串文字使用单引号,而不是双引号。一些数据库可以让你摆脱双引号,但这是一个非常糟糕的习惯。
  • 无论如何,您不应该使用字符串插值来构建 SQL,因为您没有在 1999 年破解 PHP,因此您应该使用占位符并让数据库库处理引用。

  • SQLite 驱动程序的 execute 了解?占位符,所以你可以这样说:
    names_arr.each do |each_name|
      db.execute('INSERT INTO users (name) VALUES (?)', each_name)
    end
    

    关于ruby - 如何将 Ruby 数组项插入 SQLite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214033/

    相关文章:

    android - 检查数据库值

    ruby - 找不到 jsonapi 解析器 0.1.1

    ruby 绿鞋定时器

    ruby-on-rails - FactoryGirl — 工厂未注册

    sqlite - Bundle Exec Rake DB 迁移错误

    mysql - 选择每个组中的最后一条记录以及计数

    java - 打开联系意向DISPLAY_NAME

    java - 是否可以从 Java 访问 SQLite 数据库或(SqLite 的 Sql 浏览器)?

    ruby - 如何将 ruby​​ 哈希作为命令行选项传递?

    ruby-on-rails - RSpec Controller 测试将哈希转换为字符串