如何将Ruby数组项插入SQLite?

时间:2013-10-06 21:13:07

标签: ruby sqlite

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

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。

1 个答案:

答案 0 :(得分:2)

您在此代码中遇到了几个问题:

names_arr.each do |each_name|
  db.execute('INSERT INTO users (name) VALUES ("#{each_name}");')
end
  1. 您尝试在单引号字符串中使用Ruby的字符串插值,但字符串插值仅适用于双引号字符串(以及heredocs,%Q{...}字符串,正则表达式字面值,...)。
  2. 标准SQL对字符串文字使用单引号,而不是双引号。有些数据库让你可以使用双引号,但这是一个非常糟糕的习惯。
  3. 你不应该使用字符串插值来构建SQL,你不是在1999年攻击PHP所以你应该使用占位符并让数据库库处理引用。
  4. SQLite驱动程序的execute了解?占位符,因此您可以这样说:

    names_arr.each do |each_name|
      db.execute('INSERT INTO users (name) VALUES (?)', each_name)
    end