在 Slick 中查看 SQL 查询
Posted
技术标签:
【中文标题】在 Slick 中查看 SQL 查询【英文标题】:View SQL query in Slick 【发布时间】:2014-06-19 12:01:06 【问题描述】:有没有办法观察Query
生成的SQL语句?
例如,我有这个:val q = actions.filter(v => v.actionHash === hash && v.carriedAt > past)
我可以查看它的底层原始 SQL 吗?
【问题讨论】:
【参考方案1】:Slick 2.X:
您可以打印查询语句,如Slick documentation:
val invoker = q.invoker
val statement = q.selectStatement
对于其他类型的语句,请查看 insertStatement
、deleteStatement
和 updateStatement
。
Slick 3.X:
val res = table.filter(_.id === 1L).result
res.statements.foreach(println)
Docs.
【讨论】:
这不适用于DBIOAction
,还有其他方法吗?
@Mhd.Tahawi 你能举个例子吗?我想我没有得到你的问题。
问题是,.statements
适用于 SQLAction
,但对于 DBIOAction
则不存在,这是当您编写一堆 SQLAction
s 时得到的一起理解并产生最终结果。据我所知,Monadic 加入失去了使用.statements
的能力。那是一种痛苦...
@JustinduCoeur 对,我看到SQLAction
是DBIOAction
和BasicAction
的子类,并且实际实现是调用程序(如StreamingInvokerAction
)。也许语句打印只能在调用者级别而不是在上层特征中完成,不幸的是我没有答案。
@EndeNeu 同意,尽管我认为这是 API 中的一个漏洞。理想情况下,像 DBIOAction 这样的特征将根据它们正在合成的内容提供.statements
的最佳实现。不是世界末日,但令人沮丧的是发现缺少.statements
对调试非常有用...【参考方案2】:
对于 slick 3.0
println(sortedQuery.result.statements.headOption)
【讨论】:
适用于 Slick 3.1.1 版以上是关于在 Slick 中查看 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章