斯卡拉 + 光滑 3 : Inserting the result of one query into another table

标签 scala slick slick-3.0

这个问题是关于 slick 3.0 或 3.1(我对此很灵活)

我有一个使用 map 处理的中间查询, for等,以获得我想要的结果。最后我有一个

val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]

现在我有一个 val bar: TableQuery[MySchema.Bar]我想在其中插入 foo 。

如果 foo 是 Seq我可以简单地做 bar ++= foo ,但事实并非如此。

我发现的唯一方法是通过等待结果来实现它。像这样
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))

显然query需要在某个时候使用 db.run 运行.但现在我有两个数据库运行。在一次运行中拥有所有东西不是更好吗?

有一个更好的方法吗?

最佳答案

DBIOActionmap/flatMap函数,所以你可以写一些类似的东西

val insertAction = foo.flatMap(bar ++= _)
insertAction类型为 DBIOAction[Int, NoStream, Effect.Write]或类似的东西(我不完全确定 Int 和效果),然后您可以像任何 DBIOAction 一样在数据库上运行它使用 db.run ;然后你得到的是整个查询和插入结果的 future 。

关于斯卡拉 + 光滑 3 : Inserting the result of one query into another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970333/

相关文章:

scala - 基于返回类型推断的意外隐式解析

android - 在 Scala 中将实例从 Set 移动到另一个

javascript - Comet JSON推送到javascript

java - Scala + Casbah 对象映射良好实践

scala - 在 Slick 3 中构建动态更新查询

mysql - Play 2.4 - Slick 3.0.0 - DELETE 不起作用

mysql - 仅当表不存在时如何执行 DDL?

scala - 为什么以下代码会泄漏 Slick 数据库集合?

scala - 在 Slick 交易中做自己的事情

mysql - 如何在 Slick 中使用 react 流来插入数据