【发布时间】:2016-07-05 09:21:48
【问题描述】:
我正在尝试通过使用单个批量插入而不是多次调用 ActiveRecord 的 create 方法来导入数据来优化我的 rake 任务的性能。
这是我写的代码:
inserts = []
orders.each do |ord|
inserts.push "('#{ord.company}', '#{ord.number}', '#{ord.line}', '#{Time.now.to_s(:db)}', '#{ord.comment}')"
end
sql = "INSERT INTO orders (company, number, line, created_at, comment) VALUES #{inserts.join(", ")}"
ActiveRecord::Base.connection.execute(sql)
问题是comment字符串可以包含'字符,所以生成的sql查询字符串如下:
INSERT INTO 订单(公司、编号、行、created_at、评论)值 ('100', '023074', '001', '2016-07-05 11:17:38', '转换 K7'), ('100', '023943', '001', '2016-07-05 11:17:38', 'BANDE PE D'AMARRAGE')
这将生成一个
PG::SyntaxError: ERROR: "AMARRAGE" 或附近的语法错误
我该如何处理?
【问题讨论】:
标签: ruby-on-rails postgresql ruby-on-rails-4