插入不能在 slick 中工作的对象列表
inserting a list of objects not working in slick
我用的是slick3.1.1
我想在数据库中插入一个对象列表(postgres)
我写了以下有效的代码
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.run。
所以我写了类似下面的东西
val userQuery = TableQuery[dbuserTable]
for(user<-x.userList)
{
val users = userClass(user.name,user.id)
userQuery += users
}
val f = DBAccess.db.run(DBIO.seq(userQuery.result))
Await.result(f, Duration.Inf)
然而,第二个片段没有写入数据库。有人可以指出我哪里出错了吗?
+=
不会改变您的 userQuery
。 for 循环的每次迭代都会创建一个插入操作,然后立即将其丢弃。
尝试累积插入操作而不是丢弃它们(注意 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: _*))
我知道这个老问题了,但由于我刚刚遇到它,所以我会为此提供更新的答案。
您可以使用 ++=
插入列表。
val usersTable = TableQuery[dbuserTable]
val listToInsert = x.userList.map(userClass(_.name, _.id))
val action = usersTable ++= listToInsert
DBAccess.db.run(action)
这只会执行一次插入所有内容的请求。
我用的是slick3.1.1 我想在数据库中插入一个对象列表(postgres) 我写了以下有效的代码
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.run。 所以我写了类似下面的东西
val userQuery = TableQuery[dbuserTable]
for(user<-x.userList)
{
val users = userClass(user.name,user.id)
userQuery += users
}
val f = DBAccess.db.run(DBIO.seq(userQuery.result))
Await.result(f, Duration.Inf)
然而,第二个片段没有写入数据库。有人可以指出我哪里出错了吗?
+=
不会改变您的 userQuery
。 for 循环的每次迭代都会创建一个插入操作,然后立即将其丢弃。
尝试累积插入操作而不是丢弃它们(注意 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: _*))
我知道这个老问题了,但由于我刚刚遇到它,所以我会为此提供更新的答案。
您可以使用 ++=
插入列表。
val usersTable = TableQuery[dbuserTable]
val listToInsert = x.userList.map(userClass(_.name, _.id))
val action = usersTable ++= listToInsert
DBAccess.db.run(action)
这只会执行一次插入所有内容的请求。