使用Slick 1.0.0计算行数

not*_*xit 8 scala slick

我正在尝试使用Slick 1.0.0 创建一个查询,该查询返回与以下SQL语句等效的行计数:

SELECT COUNT(*) FROM table;
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的是:

val query = for {
  row <- Table
} yield row
println(query.length)
Run Code Online (Sandbox Code Playgroud)

这打印scala.slick.ast.FunctionSymbol$$anon$1@6860991f.此外,query.length似乎是类型scala.slick.lifted.Column.我找不到执行查询的方法.我可以在文档和其他任何地方找到的所有示例Column都不适用于ScalaQuery不适用于ScalaQuery,并且不再起作用.

我该怎么做才能执行此操作?

thi*_*nom 2

使用:

val query = for(row <- Table) yield row 
println(Query(query.count).first)
Run Code Online (Sandbox Code Playgroud)

相当于count“SELECT COUNT(*) FROM Table”。为了获得第一行也是唯一一行,您必须使用它first来获取计数。

  • 简单说明一下:“count”已被弃用,取而代之的是“length”。 (2认同)
  • 是否知道如何处理由“length”等方法返回的“scala.slick.lifted.Column”类型的值?您的解决方案确实有效,但生成了一个相当长的包含三个“SELECT”的语句。对于没有任何进一步要求的简单计数来说,这似乎太多了:`select x2.x3 from (select count(1) as x3 from (select x4.'id', x4.'value' from 'table' x4) x5) x2` (2认同)