批量插入Rails SQLite

时间:2013-06-24 08:22:54

标签: ruby-on-rails sqlite

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

SQLite3 :: SQLException:near“,”:语法错误: INSERT INTO令牌(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,'Title' ,'2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','公司'),(42,1,'Title','2013-06- 24 11:54:31 +0400','2013-06-24 11:54:31 +0400','To'),(42,1,'Title','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','观看'),(42,1,'Title','2013-06-24 11:54:31 +0400','2013 -06-24 11:54:31 +0400','In'),(42,1,'Title','2013-06-24 11:54:31 +0400','2013-06-24 11: 54:31 +0400','大数据')

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

我有以下设置。

  • Ruby 2.0
  • Rails 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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

  raw_sql = "..... VALUES #{vec.join(', ')}"