0

我正在使用 Slick 3.0 访问 Play 2.4 中的 PostgreSQL 数据库,并且需要一种方法来删除表中的所有行而不删除它。

删除单行有效:

lazy val tasks = TableQuery[Tasks]

def delete(id: Long) = db.run(tasks.filter(_.id === id).delete)

但是我不知道如何在 slick 中实现一个空的 where 子句来删除所有行。(如 PostgreSQL 文档中所见

简单的解决方案db.run(tasks.delete)似乎没有做任何事情,似乎没有可用的truncate功能。

编辑:

db.run(tasks.delete)工作,你只需要等待未来完成。截断表需要一些 SQL db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;"):.

4

1 回答 1

0

既然你已经得到了答案,我想补充一点,如果你想让程序等待数据库查询完成,你也可以使用包中的Await.result函数。scala.concurrent查询是这样的:

Await.result(db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;"),Duration.Inf))
于 2016-12-05T06:40:46.200 回答