scala slick postgresql创建表模式

scala slick postgresql创建表模式,scala,slick,Scala,Slick,我是slick的新手,请查看以下简单代码: import slick.driver.PostgresDriver.api._ import slick.lifted.{ProvenShape, Tag} case class Person(id: Int, name: String) class Persons(tag: Tag) extends Table[Person](tag, "persons") { val id: Rep[Int] = column[Int]("id", O

我是slick的新手,请查看以下简单代码:

import slick.driver.PostgresDriver.api._
import slick.lifted.{ProvenShape, Tag}

case class Person(id: Int, name: String)

class Persons(tag: Tag) extends Table[Person](tag, "persons") {

  val id: Rep[Int] = column[Int]("id", O.PrimaryKey)
  val name: Rep[String] = column[String]("name")

  override def * : ProvenShape[Person] = (id, name) <> (Person.tupled, Person.unapply)
}

object MainRunner extends App {

  val dbUrl = "jdbc:postgresql://172.17.0.2/slick-test";
  val dbUsername = "username"
  val dbPassword = "password"
  val dbDriver = "org.postgresql.Driver"

  val db = Database.forURL(url = dbUrl, driver = dbDriver, user = dbUsername, password = dbPassword)

  val persons = TableQuery[Persons]
  val queries = DBIO.seq(
    persons.schema.create
  )
  val setup = db.run(queries)
  println(setup)
}      
导入slick.driver.PostgresDriver.api_
导入光滑。提升。{ProvenShape,Tag}
案例类人物(id:Int,name:String)
类Persons(tag:tag)扩展表[Person](tag,“Persons”){
val id:Rep[Int]=列[Int](“id”,O.PrimaryKey)
val名称:Rep[String]=列[String](“名称”)
覆盖定义*:ProvenShape[Person]=(id,name)(Person.tuple,Person.unapply)
}
对象MainRunner扩展应用程序{
val dbUrl=“jdbc:postgresql://172.17.0.2/slick-test";
val dbUsername=“用户名”
val dbPassword=“password”
val dbDriver=“org.postgresql.Driver”
val db=Database.forURL(url=dbUrl,driver=dbDriver,user=dbUsername,password=dbPassword)
val persons=TableQuery[persons]
val查询=DBIO.seq(
persons.schema.create
)
val setup=db.run(查询)
println(设置)
}      
您认为此代码有问题吗?
此代码编译和运行时没有任何问题(错误或异常)
但无法创建表架构

怎么了

如果您是从play+slick开始的,那么这个项目可能会帮助您:

  • 还有教程

我认为这与会话无关(在Slick 3.x中没有这样的事情)。您遇到的问题是,您没有等到操作完成(创建模式之前应用程序完成;也就是说,在
Future
执行之前)

更改这些行:

val setup = db.run(queries)
println(setup)
要(注意新的导入):


不,这只是用于测试和学习的静态应用程序。
import import scala.concurrent.duration.DurationLong
import scala.concurrent.{Await, Future}
...
...
val setup = db.run(queries).foreach(_ => println("Done, schema created!))
Await.result(setup, 5L.seconds)