gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:45:13 25 4
gpt4 key购买 nike

我想执行我的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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com