使用 Play 和 Slick 时我应该如何处理数据库演变?我必须手动写 SQL 吗?
How should I handle database evolutions when using Play and Slick? Must I manually write SQL?
我正在查看 "Hello Slick" 教程。用户 table 被定义,然后使用 users.schema.create
创建(github 上的代码已经过时,所以那里有 users.ddl.create
,但是当我在 Activator 中创建应用程序时,它是 schema
因为它使用的是 Slick 3.0.0,已经足够接近了)。但是,如果我第二次 运行 应用程序,则会出现错误,因为 table 已经存在。我没有看到像 users.schema.createIfNotExists
这样的选项,这有点令人惊讶。但是无论如何,如果我在将来的某个时候向 table 添加一列,我将需要更复杂的东西。那么 Slick 没有办法帮助 migrations/evolutions 吗?
我正在使用 Play,并且据推测 Play Slick has special support for database evolutions. It's not clear what is offered in addition to the usual Play evolutions 是 Slick 特有的:我们只是被告知要添加依赖项。我看不到任何进一步的文档。
我是否必须为进化(1.sql、Ups、Downs 等)手动编写 SQL?如果是这样,那么必须另外编写 column[Int]("ID", O.PrimaryKey, O.AutoInc)
之类的代码似乎很愚蠢。我为重复工作而烦恼,并担心如果我的 SQL/DDL 是错误的,当我访问数据库时会出现细微的错误。我可能是错的,但我似乎记得在 Django 中更改模型后可以自动生成迁移,所以这似乎不是一个无法解决的问题。这只是没有实现的东西还是我遗漏了什么?
如果相关的话,我正在使用 PostgreSQL。
您可以使用 slicks 模式代码生成功能:
http://slick.typesafe.com/doc/3.0.0/code-generation.html
这样,如果您更新数据库模式,您就不必手写漂亮的 类 来对应 table 这会为您完成。
我正在查看 "Hello Slick" 教程。用户 table 被定义,然后使用 users.schema.create
创建(github 上的代码已经过时,所以那里有 users.ddl.create
,但是当我在 Activator 中创建应用程序时,它是 schema
因为它使用的是 Slick 3.0.0,已经足够接近了)。但是,如果我第二次 运行 应用程序,则会出现错误,因为 table 已经存在。我没有看到像 users.schema.createIfNotExists
这样的选项,这有点令人惊讶。但是无论如何,如果我在将来的某个时候向 table 添加一列,我将需要更复杂的东西。那么 Slick 没有办法帮助 migrations/evolutions 吗?
我正在使用 Play,并且据推测 Play Slick has special support for database evolutions. It's not clear what is offered in addition to the usual Play evolutions 是 Slick 特有的:我们只是被告知要添加依赖项。我看不到任何进一步的文档。
我是否必须为进化(1.sql、Ups、Downs 等)手动编写 SQL?如果是这样,那么必须另外编写 column[Int]("ID", O.PrimaryKey, O.AutoInc)
之类的代码似乎很愚蠢。我为重复工作而烦恼,并担心如果我的 SQL/DDL 是错误的,当我访问数据库时会出现细微的错误。我可能是错的,但我似乎记得在 Django 中更改模型后可以自动生成迁移,所以这似乎不是一个无法解决的问题。这只是没有实现的东西还是我遗漏了什么?
如果相关的话,我正在使用 PostgreSQL。
您可以使用 slicks 模式代码生成功能:
http://slick.typesafe.com/doc/3.0.0/code-generation.html
这样,如果您更新数据库模式,您就不必手写漂亮的 类 来对应 table 这会为您完成。