【问题标题】:How should I handle database evolutions when using Play and Slick? Must I manually write SQL?使用 Play 和 Slick 时应该如何处理数据库演变?我必须手动编写 SQL 吗?
【发布时间】:2016-03-11 21:35:27
【问题描述】:

我正在查看“Hello Slick”教程。定义了一个用户表,然后使用users.schema.create 创建(github 上的代码已经过时,所以那里是users.ddl.create,但是当我在Activator 中创建应用程序时,它是schema,因为它使用的是接近的Slick 3.0.0足够)。但是,如果我第二次运行该应用程序,则会出现错误,因为该表已经存在。我没有看到像users.schema.createIfNotExists 这样的选项,这有点令人惊讶。但无论如何,如果我将来某个时候向表中添加一列,我将需要更复杂的东西。那么 Slick 是否无法帮助迁移/进化?

我正在使用 Play,据说是 Play Slick has special support for database evolutions。目前尚不清楚除了 Slick 特有的 Play evolutions 之外还提供了什么:我们只是被告知添加一个依赖项。我看不到任何进一步的文档。

我是否必须手动编写 SQL 以进行进化(1.sql、Ups、Downs 等)?如果是这样,另外编写column[Int]("ID", O.PrimaryKey, O.AutoInc) 之类的代码似乎很愚蠢。我对重复工作感到困扰,并担心如果我的 SQL/DDL 错误,当我访问数据库时会出现细微的错误。我可能错了,但我似乎记得在 Django 中更改模型后可以自动生成迁移,所以这似乎不是一个无法解决的问题。这只是不是已经实现的东西还是我遗漏了什么?

如果相关,我正在使用 PostgreSQL。

【问题讨论】:

    标签: scala playframework playframework-2.0 database-migration slick-3.0


    【解决方案1】:

    您可以使用 slicks 架构代码生成功能:

    http://slick.typesafe.com/doc/3.0.0/code-generation.html

    这样,如果您更新 db 架构,您不必手动编写光滑的类来与表相对应,这将为您完成。

    【讨论】:

    • 那么它是根据DB的状态生成Scala的吗?
    • 准确地说,您可以在每次更改数据库或将应用程序设置为编译时手动执行此操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多