0

我一直在努力让批量插入在我的 Rails 设置中工作。我收到以下错误消息。

SQLite3::SQLException: near ",": 语法错误: INSERT INTO tokens (article_id,count,'origin','created_at','updated_at','token') VALUES (42,1,'Title','2013- 06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','5'), (42,1,'职称','2013-06-24 11:54 :31 +0400','2013-06-24 11:54:31 +0400','公司'), (42,1,'职称','2013-06-24 11:54:31 +0400', '2013-06-24 11:54:31 +0400','To'), (42,1,'标题','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','观看'), (42,1,'标题','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 + 0400','在'), (42,1,'职称','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','大数据')

当我将上面的 SQL 字符串粘贴到 Firefox 的SQLite 插件中并执行查询时,它工作正常。所以我认为我在 Rails 中使用这个字符串的方式应该有问题。

我有以下设置。

  • 红宝石 2.0
  • 导轨 3.2.13
  • sqlite3 1.3.7
  • Ubuntu 12.04

这是进行批量上传的方法。它需要 2 个参数。1 包含字符串标记和每个标记的数字计数的哈希。第二个参数只是一个字符串。

在 Article 类的实例上调用该方法。所以 self.id 只是文章 ID。

我还尝试通过activerecord-import gem批量上传,但它也失败了,并出现了类似的语法错误消息。

def token_list(names,originvar)
  vec =[]

  names.each do |i, count|
    time = Time.now
    vec << "(#{self.id},#{count},'#{originvar}','#{time}','#{time}','#{i}')" 
  end

  raw_sql = "INSERT INTO tokens (article_id,count,'origin','created_at','updated_at','token') VALUES #{vec.join(", ")}"

  Token.connection.execute(raw_sql)
end

提前致谢。

4

1 回答 1

0

我想你应该在这里使用单引号:

  raw_sql = "..... VALUES #{vec.join(', ')}"
于 2013-06-24T08:35:35.830 回答