2013-12-16 28 views
12

说我有一个像续集表达:有没有办法看到Sequel表达式会生成的原始SQL?

db.select(:id).from(:some_table).where(:foo => 5) 

有没有办法让SQL字符串,这将产生(即"SELECT id FROM some_table WHERE foo = 5")?我注意到对上述表达式的结果调用inspectto_s包括生成的SQL,但不知道如何直接访问它。

又有怎样的续集表达不返回一个数据集,如:

db.from(:some_table).update(:foo => 5) 

是否有可能看到这个SQL它在执行之前?

回答

20

您可以在数据集调用sql

db.select(:id).from(:some_table).where(:foo => 5).sql # => "SELECT `id` FROM `some_table` WHERE (`foo` = 5)" 

对于更新查询,你可以这样做:

db.from(:some_table).update_sql(:foo => 5) # => "UPDATE `some_table` SET `foo` = 5" 

一些类似的有用的方法:

insert_sql 
delete_sql 
truncate_sql 
+0

什么是'db'在这种情况下,你如何访问/实例化它? –

+0

有没有办法从ActiveRecord关系中获取? –

+0

这是一个类似'db = Sequel.connect('sqlite://blog.db')'的续集连接。在'ActiveRecord :: Relation'中,你可以调用'to_sql' – mechanicalfish

相关问题