我如何一次为return
表格的一行构建一个scala查询?
如果他们帮助回答此问题,我的表位于以下位置: Slick 3.0 (scala) queries don't return data till they are run multiple times (I think)
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)
但不是打印,我需要各自返回。
答案 0 :(得分:2)
改为使用具体化结果:
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
阻止当前线程,使其中一个光滑的最佳功能过时。阻塞线程是你不应该做的事情。我强烈建议您阅读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
)将会运行。