【问题标题】:Optimize database actions Slick 3优化数据库操作 Slick 3
【发布时间】:2017-11-26 15:56:16
【问题描述】:

我用 Slick 创建了一个数据库。我正在尝试创建表模式,选择一些信息等等。这是我创建模式的代码:

val createUserTable = UserTable.table.schema.create
val createTaskTable = TaskTable.table.schema.create
Await.result(db.run(DBIO.seq(Queries.createUserTable, Queries.createTaskTable)), 2 seconds)

这段代码工作得很好,但我不想在每个查询中都使用 Await.result。我正在寻找的是至少按目的(创建、选择等)批量执行它们。我可以创建这个方法来传递不同的操作:

def executeAction[T](action: DBIO[T]) =
    Await.result(db.run(action), 2 seconds)

所以我很好奇如何更改它以传递一些包含一系列查询的数据结构?例如List(createUserTable, createTaskTable)

感谢您的帮助!

【问题讨论】:

  • 请添加您正在使用的 slick 版本。 slick 2 和 slick 3 差别很大
  • 我已经编辑了这个问题。我正在使用 Slick 3

标签: postgresql scala slick


【解决方案1】:

避免等待每个 DBIO 操作的两种方法

  1. 创建 DBIO 操作列表并使用 DBIO.seq 收集它们并执行。

  2. 使用 for-comprehension 将所有 DBIO 操作组合成一个 DBIO 操作。

这将帮助您一次又一次地使用 await 来等待中间 DBIO 操作的结果。

在这两种情况下,您必须至少使用Await.result 等待主线程中的结果(即停止主线程退出)。

【讨论】:

  • 所以我的线路Await.result(db.run(DBIO.seq(Queries.createUserTable, Queries.createTaskTable)), 2 seconds) 真的可以吗?我的意思是,我可能会在此处添加更多操作。对吗?
猜你喜欢
  • 2015-09-15
  • 2014-01-26
  • 1970-01-01
  • 2023-02-02
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2020-12-10
相关资源
最近更新 更多