我如何使用 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
) 将 运行.
我如何构建一个 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
) 将 运行.