我如何使用 slick 3.0 一次 return 一行?

How would I use slick 3.0 to return one row at a time?

我如何构建一个 scala 查询一次 return 我的 table 一行?

我的 table 如果他们帮助回答这个问题,他们在以下位置:

 val q5 = for {
  c <- dat.patientsss 
} yield (c.PID, c.Gender, c.Age, c.Ethnicity)

Await.result((db.stream(q5.result).foreach(println)),Duration.Inf)

但不是打印,我需要每个 return。

回答

改用具体化结果:

val result = Await.result((db.run(q5.result)), Duration.Inf)

result 是一个包含所有患者数据的 Seq。使用foreach遍历结果集:

result.foreach(r => yourFancyAlgorithm(r))  // r is a single patients data row

旁注

Await 阻塞当前线程,使 slick 的最佳功能之一过时。阻塞线程是你不应该做的事情。我强烈建议阅读 scala 中的 Future and Promise
上面的例子可以简单写成:

val result = db.run(q5.result))

result 在这种情况下将是 Future[Seq[(yourPatientsData)]] 类型。要访问数据,请对结果使用 map

result.map(d => whatever)  // d is of type Seq[(yourPatientsData)]

在等待结果的同时,应用程序的其余部分将继续进行计算和其他操作。最后,当结果准备好时,回调 (d => whatever) 将 运行.