Play 2.4 Slick 3.0 - 删除表中的所有行

Posted

技术标签:

【中文标题】Play 2.4 Slick 3.0 - 删除表中的所有行【英文标题】:Play 2.4 Slick 3.0 - Delete all rows in table 【发布时间】:2015-06-28 21:16:01 【问题描述】:

我正在使用 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 子句来删除所有行。 (As seen in PostgreSQL documentation)

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

编辑:

db.run(tasks.delete) 有效,您只需要等待 Future 完成即可。截断表需要一些 SQL:db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;")

【问题讨论】:

注意db.run返回一个你必须等待它完成的未来 如果您对自己的解决方案感到满意,请将其作为此问题的答案提交并接受。 【参考方案1】:

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

Await.result(db.run(sqlu"TRUNCATE TABLE table_name RESTART IDENTITY;"),Duration.Inf))

【讨论】:

以上是关于Play 2.4 Slick 3.0 - 删除表中的所有行的主要内容,如果未能解决你的问题,请参考以下文章

删除不适用于 Play! 2.4、Slick 3 和 PostgreSQL

升级 Play 到 2.4,Slick 到 3.1.1,值 withTransaction 不是 play.api.db.slick.Database 的成员

无法使用 play-slick 1.0.1/slick 3.0 连接到 mysql 数据库:配置错误

如何使用Slick和Play在测试中应用手动演变! 2.4

在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?

使用 Slick 3.0 在同一事务中进行多次插入