我使用的是slick3.1.1 我想在DB(postgres)中插入一个对象列表 我编写了以下代码
this.set('itemImage', imgSource);
但是我正在运行多个数据库查询。所以我在某种程度上只调用一个db.run。 所以我写了类似下面的内容
for(user<-x.userList)
{
val users = userClass(user.name,user.id)
val userAction = DBAccess.userTable.insertOrUpdate(users)
val f = DBAccess.db.run(DBIO.seq(userAction))
Await.result(f, Duration.Inf)
}
然而,第二篇文章没有写入DB。有人能指出我哪里错了吗?
答案 0 :(得分:1)
我知道这个年龄很大,但是由于我刚摔倒,我会为此提供更新的答案。
您可以使用++=
插入列表。
val usersTable = TableQuery[dbuserTable]
val listToInsert = x.userList.map(userClass(_.name, _.id))
val action = usersTable ++= listToInsert
DBAccess.db.run(action)
这只会执行一次同时插入所有内容的请求。
答案 1 :(得分:0)
+=
不会改变您的userQuery
。 for循环的每次迭代都会创建一个插入操作,然后立即将其丢弃。
尝试累积插入操作而不是丢弃它们(NB使用yield
):
val usersTable = TableQuery[dbuserTable]
val inserts = for (user <- x.userList) yield {
val userRow = userClass(user.name, user.id)
usersTable += userRow
}
DBAccess.db.run(DBIO.seq(inserts: _*))