我想在将新值插入数据集时使用SQL函数。但是,我一直收到TypeError: can't convert Sequel::SQL::Function into String
错误。续集文档解释了如何选择使用函数,而不是插入。
理想情况下,我想避免使用DB.run
,因为我动态插入,原始SQL很乱且不灵活。
这就是我要做的事情:
INSERT INTO dataset (col1, col2, col3) VALUES ('something', 3, func(value))
这就是我在续集中的内容:
x = 'something'
y = 3
func_value = Sequel.function(:func, value)
DB[:dataset].insert (:col1 => x, :col2 => y, :col3 => func_value)
这可能吗?如果是这样,我错过了什么?
答案 0 :(得分:0)
想出来。创建一个Sequel :: function对象,然后将其作为哈希值。
irb(main):028:0> tbl
=> #<Sequel::MySQL::Dataset: "SELECT * FROM `foo`.`bar`">
irb(main):029:0> uhex = Sequel.function(:unhex,7)
=> #<Sequel::SQL::Function @args=>[7], @f=>:unhex>
irb(main):030:0> tbl.insert_sql( {:field_name => uhex })
=> "INSERT INTO `foo`.`bar` (`field_name`) VALUES (unhex(7))"
答案 1 :(得分:0)
在Sequel中看起来有几种不同的语法调用SQL函数的方法: http://sequel.rubyforge.org/rdoc/files/doc/dataset_filtering_rdoc.html