在 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

对于其他类型的语句,请查看 insertStatementdeleteStatementupdateStatement

Slick 3.X:

val res = table.filter(_.id === 1L).result
res.statements.foreach(println)

Docs.

【讨论】:

这不适用于DBIOAction,还有其他方法吗? @Mhd.Tahawi 你能举个例子吗?我想我没有得到你的问题。 问题是,.statements 适用于 SQLAction,但对于 DBIOAction 则不存在,这是当您编写一堆 SQLActions 时得到的一起理解并产生最终结果。据我所知,Monadic 加入失去了使用.statements 的能力。那是一种痛苦... @JustinduCoeur 对,我看到SQLActionDBIOActionBasicAction 的子类,并且实际实现是调用程序(如StreamingInvokerAction)。也许语句打印只能在调用者级别而不是在上层特征中完成,不幸的是我没有答案。 @EndeNeu 同意,尽管我认为这是 API 中的一个漏洞。理想情况下,像 DBIOAction 这样的特征将根据它们正在合成的内容提供.statements 的最佳实现。不是世界末日,但令人沮丧的是发现缺少.statements 对调试非常有用...【参考方案2】:

对于 slick 3.0

println(sortedQuery.result.statements.headOption)

【讨论】:

适用于 Slick 3.1.1 版

以上是关于在 Slick 中查看 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

slick for play 使用原生sql查询以及拼接sql

优化 Slick 生成的 SQL 查询

Slick教程

将 React-Slick 与查询参数同步

Slick - 使用多个表更新查询

Scala Slick 无法将查询与计数联合起来