使用光滑插入不起作用

时间:2016-03-23 16:26:19

标签: database scala slick

我是Scala的新手并且一直在学习光滑(3.1.1)。在编写特定代码以将数据插入表时,如果不存在则必须插入一行,否则更新该表中的特定列。对于单行更新,我编写了以下代码,它可以正常工作:

 def updateDate(id: Int, country : Country, lastDate: DateTime)(implicit ec: ExecutionContext) =
        byPKC.applied((id, country, )).map(_.lastMessageDate).update(lastDate) flatMap {
          case 0 ⇒
            create(User.withLastDate(id, country, lastDate))
          case x ⇒ DBIO.successful(x)
        }

现在我不确定如何在scala中执行批量操作。我尝试了以下,虽然效率低,但应该可以工作,但没有行插入表中。

 def updateDates(ids: Set[Int], country: Country, lastDate: DateTime)(implicit ec: ExecutionContext) = {
    ids.foreach(e ⇒ updateDate(e, country, lastDate))
    DBIO.successful(1)
  }

如何在scala中进行批量写入?另外,为什么这个批量操作不起作用?任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

这个由两部分组成的问题分为两部分。

  

如何在scala中进行批量写入?

您不能在SQL中进行批量更新;它根本不受支持。但是,您可以批量插入。 Slick支持在++=上使用TableQuery运算符批量插入。

  

为什么这种批量操作不起作用?

您正在生成DBIO值,但您没有通过db.run()执行这些值。 DBIO是Scala操作到SQL的映射,但您必须在将其发送到数据库之前执行它。