如何在insert语句中使用Sequel SQL函数?
我希望在向数据集中插入新值时使用SQL函数。但是,我一直遇到TypeError:无法将Sequel::SQL::Function转换为字符串错误。Sequel文档解释了如何使用函数进行选择,而不是插入 理想情况下,我希望避免使用DB.run,因为我是动态插入的,而原始SQL是混乱且不灵活的 这就是我想做的:如何在insert语句中使用Sequel SQL函数?,sql,ruby,sequel,Sql,Ruby,Sequel,我希望在向数据集中插入新值时使用SQL函数。但是,我一直遇到TypeError:无法将Sequel::SQL::Function转换为字符串错误。Sequel文档解释了如何使用函数进行选择,而不是插入 理想情况下,我希望避免使用DB.run,因为我是动态插入的,而原始SQL是混乱且不灵活的 这就是我想做的: INSERT INTO dataset (col1, col2, col3) VALUES ('something', 3, func(value)) 这是我在续集里看到的: x = 's
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)
这可能吗?如果是这样的话,我还缺少什么?找到了答案。创建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))"
在Sequel中,似乎有几种不同的语法调用SQL函数的方法:
我不知道续集,但我建议尝试隔离问题。对我来说,第一步是输出func_值以查看它是什么。func_值是Sequel::SQL::Function的一个实例。我想我的问题可以归结为如何将Sequel::SQL::Function实例传递到Sequel insert方法中。我最终使用DB.run为func_value变量提取适当的值,并且仍然使用DB[:dataset]。插入语法以获得灵活性:DB.runselect func{value};如果还有其他答案,我很想看看!我需要这样做,因为我正试图取消释放一个UUID,我正试图使用它作为PK。从这篇文章中得到了这个想法: