如何在Ruby脚本中清理原始SQL

时间:2019-07-12 06:55:27

标签: ruby sequel

我正在尝试编写一个使用Sequel与数据库连接的脚本。

如果我有这样的SQL查询:

record_values = csv_row.to_h.values.join(', ')

sql_query = "INSERT INTO table (#{ COLUMN_NAMES.join(', ') }) VALUES (#{ record_values })"

数组record_values很危险。

我该如何消毒?

我试图用消毒

ActiveRecord.sanitize_sql_array(sql_query)

但是我一直收到错误消息

NoMethodError: undefined method 'sanitize_sql_array' for ActiveRecord:Module

1 个答案:

答案 0 :(得分:3)

我不知道Sequel,但是您尝试使用标准的insert方法吗?

connection = Sequel.connect('...')
table_name = connection.from(:table_name)
# OR
# table_name = DB.from(:table_name)
# table_name = DB[:table_name]
table_name.insert(csv_row.to_h)

我相信它更可靠,因为您避免了COLUMN_NAMESrecord_values之间的差异。