【问题标题】:View SQL query in Slick在 Slick 中查看 SQL 查询
【发布时间】:2014-06-19 12:01:06
【问题描述】:

有没有办法观察Query生成的SQL语句?
例如,我有这个:
val q = actions.filter(v => v.actionHash === hash && v.carriedAt > past)
我可以查看它的底层原始 SQL 吗?

【问题讨论】:

    标签: sql scala slick


    【解决方案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 版
    猜你喜欢
    • 2016-01-23
    • 2011-05-06
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2015-11-08
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多