【问题标题】:Inserting SQLite rows via Ruby iteration通过 Ruby 迭代插入 SQLite 行
【发布时间】:2013-10-13 12:31:17
【问题描述】:

将 5 行 4 列数据插入现有 SQLite 数据库,我收到这些错误...

/Users/Sam/.rvm/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize': near "tagline": syntax error (SQLite3::SQLException)
        from /Users/Sam/.rvm/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `new'
        from /Users/Sam/.rvm/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `prepare'
        from /Users/Sam/.rvm/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:134:in `execute'
        from insert_code_sam.rb:60:in `block in <main>'
        from insert_code_sam.rb:59:in `times'
        from insert_code_sam.rb:59:in `<main>'

这是我的 .rb 文件中的最后几行 (59-61):

    5.times do
      db.execute('INSERT INTO index1 (name tagline blurb photo_url) 
        VALUES (?, ?, ?, ?)', ["name", "tagline", "blurb", "photo"])
    end

有什么建议吗?

【问题讨论】:

  • 在代码块中添加了返回 (/n) 以便于阅读。
  • 您反对使用美妙、方便的Sequel 库吗?它使许多与 SQL 相关的任务变得轻而易举。
  • @Phrogz 感谢您的链接。我刚刚浏览了自述文件,它看起来很有帮助;我现在是最后期限,所以稍后会细读。我也是一个 SQL 菜鸟,所以想要掌握基础知识。您认为使用 Sequel 会不会影响这项工作?

标签: sql ruby sqlite sqlite3-ruby


【解决方案1】:

您的 SQL 中只是有一个小的语法错误。 INSERT 的列列表应以逗号分隔:

INSERT INTO index1 (name, tagline, blurb, photo_url) ...
                        ^        ^      ^

所以你的 Ruby 应该是这样的:

5.times do
  db.execute('INSERT INTO index1 (name, tagline, blurb, photo_url) VALUES (?, ?, ?, ?)', ["name", "tagline", "blurb", "photo"])
end

参见SQLite INSERT syntax 图中的“列名”循环:

【讨论】:

  • +1 用于添加他们的铁路图。 SQLite 有很多很棒的地方,也有很多次优的地方,但是这些图表简直太棒了。
  • 完美!有用。再次感谢@mu! @Phrogz 图确实很棒。找到了原始的谷歌sqlite插入语法。
  • @Phrogz:我对整个 SQLite 文档感到非常满意,这些图表是特别有用的语法摘要。
  • 仅供参考,我刚刚了解到 mu 使用的占位符的另一个术语是“卫生更换”。
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 2011-09-07
  • 2014-10-29
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 2012-02-11
相关资源
最近更新 更多