我一直在努力让批量插入在我的 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
提前致谢。