evolution 会自动创建数据库和 table 吗?
Does evolution create automatically database and table?
我有 class 组表,它构成了 table 的模式。
如我所见,在其他项目中有 conf/evolution/default 文件夹文件 1.sql,它是从代码自动生成的(正如我假设的那样)。
但是当我启动我的应用程序时 - 什么都没有创建。
我该怎么办?它是自动创建的还是我在代码中编写的?
class GroupTable(tag: Tag) extends Table[Group](tag, "groups") {
def name = column[String]("name", O.PrimaryKey)
def day = column[String]("day")
def subject = column[String]("subject")
def typeSub = column[String]("typeSub")
def start = column[Time]("start")
def end = column[Time]("end")
def teacher = column[String]("teacher")
def auditorium = column[Int]("auditorium")
override def * = (name, day, subject, typeSub, start, end, teacher, auditorium) <>((Group.apply _).tupled, Group.unapply)
}
application.conf:
slick.dbs.default.driver = "slick.driver.MySQLDriver$"
slick.dbs.default.db.driver="com.mysql.jdbc.Driver"
slick.dbs.default.db.url="jdbc:mysql://localhost:3306/testdb"
slick.dbsdefault.user="root"
slick.dbs.default.password=""
play.evolutions.autoApply=true
evolutionplugin=enabled
play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true
built.sbt:
name := "TimetableAPI"
version := "1.0"
lazy val `timetableapi` = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(cache, ws, specs2 % Test, evolutions,
"mysql" % "mysql-connector-java" % "5.1.34",
"com.typesafe.play" %% "play-slick" % "1.1.0",
"com.typesafe.play" %% "play-slick-evolutions" % "1.1.0")
unmanagedResourceDirectories in Test <+= baseDirectory(_ / "target/web/public/test")
resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"
routesGenerator := InjectedRoutesGenerator
我不知道 scalaz,但一般来说,进化不是自动创建的,它们是手动编写的。每次对数据库进行更改时,都会写入下一个编号为 sql 的文件,以应用更改 (Ups) 和删除更改 (Downs)。
您可以使用数据库工具(例如MySql Workbenches 数据库同步功能)在模型和实际数据库之间生成"difference"。这些脚本可以帮助编写演进。
更多文档 here。
我在 Play 框架中尝试了进化。
关于您的问题,“evolution 是否会自动创建数据库并且table?”
由于您正在使用 mysql,
1.) 不,进化不会为你创造数据基础。您需要创建 "testdb" 数据库并将权限授予 "root"
2.) 是的,进化为你创造数据table。
为什么不使用H2作为测试的数据库引擎呢? evolution将从头开始为您创建数据库和数据table(无需创建数据库)。您也可以使用 H2 数据库引擎模仿 mysql:
db.default.url="jdbc:h2:mem:play;MODE=MYSQL"
请参阅link:
https://www.playframework.com/documentation/2.5.x/Developing-with-the-H2-Database
我有 class 组表,它构成了 table 的模式。
如我所见,在其他项目中有 conf/evolution/default 文件夹文件 1.sql,它是从代码自动生成的(正如我假设的那样)。
但是当我启动我的应用程序时 - 什么都没有创建。
我该怎么办?它是自动创建的还是我在代码中编写的?
class GroupTable(tag: Tag) extends Table[Group](tag, "groups") {
def name = column[String]("name", O.PrimaryKey)
def day = column[String]("day")
def subject = column[String]("subject")
def typeSub = column[String]("typeSub")
def start = column[Time]("start")
def end = column[Time]("end")
def teacher = column[String]("teacher")
def auditorium = column[Int]("auditorium")
override def * = (name, day, subject, typeSub, start, end, teacher, auditorium) <>((Group.apply _).tupled, Group.unapply)
}
application.conf:
slick.dbs.default.driver = "slick.driver.MySQLDriver$"
slick.dbs.default.db.driver="com.mysql.jdbc.Driver"
slick.dbs.default.db.url="jdbc:mysql://localhost:3306/testdb"
slick.dbsdefault.user="root"
slick.dbs.default.password=""
play.evolutions.autoApply=true
evolutionplugin=enabled
play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true
built.sbt:
name := "TimetableAPI"
version := "1.0"
lazy val `timetableapi` = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(cache, ws, specs2 % Test, evolutions,
"mysql" % "mysql-connector-java" % "5.1.34",
"com.typesafe.play" %% "play-slick" % "1.1.0",
"com.typesafe.play" %% "play-slick-evolutions" % "1.1.0")
unmanagedResourceDirectories in Test <+= baseDirectory(_ / "target/web/public/test")
resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"
routesGenerator := InjectedRoutesGenerator
我不知道 scalaz,但一般来说,进化不是自动创建的,它们是手动编写的。每次对数据库进行更改时,都会写入下一个编号为 sql 的文件,以应用更改 (Ups) 和删除更改 (Downs)。
您可以使用数据库工具(例如MySql Workbenches 数据库同步功能)在模型和实际数据库之间生成"difference"。这些脚本可以帮助编写演进。
更多文档 here。
我在 Play 框架中尝试了进化。
关于您的问题,“evolution 是否会自动创建数据库并且table?”
由于您正在使用 mysql,
1.) 不,进化不会为你创造数据基础。您需要创建 "testdb" 数据库并将权限授予 "root"
2.) 是的,进化为你创造数据table。
为什么不使用H2作为测试的数据库引擎呢? evolution将从头开始为您创建数据库和数据table(无需创建数据库)。您也可以使用 H2 数据库引擎模仿 mysql:
db.default.url="jdbc:h2:mem:play;MODE=MYSQL"
请参阅link: https://www.playframework.com/documentation/2.5.x/Developing-with-the-H2-Database