gpt4 book ai didi

ruby-on-rails - rails 4,单质量插入

转载 作者:行者123 更新时间:2023-11-29 13:23:07 24 4
gpt4 key购买 nike

我试图通过使用单个批量插入而不是多次调用 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 orders (company, number, line, created_at, comment) VALUES ('100', '023074', '001', '2016-07-05 11:17:38', 'TRANSFORMATION K7'), ('100', '023943', '001', '2016-07-05 11:17:38', 'BANDE PE D'AMARRAGE')

这将生成一个

PG::SyntaxError: ERROR: syntax error at or near "AMARRAGE"

我该如何处理?

最佳答案

问题是您的字符串引号关闭了 SQL 查询中的字符串值。尝试 escaping them :

'#{ord.comment.gsub("'"){ "\\'" }'

这样,SQL 查询将包含有效的字符串。

另外,你不应该做你想做的事。如果 comment 属性包含 sql 代码,则可能会被注入(inject),并对您的数据库进行恶意操作。请阅读this .注意安全!

关于ruby-on-rails - rails 4,单质量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com