编写第一个 migration

未匹配的标注

编写第一个 migration

现在我们已经安装了数据库和 ORM ,我们应该用它们来做些什么,可能是以某种结构化方式存储一些数据 。

Diesel 通过一系列 “migration” 来更改数据库结构。对于每个 migration ,我们需要提供所需的命令行以实现我们正在进行的对数据库的更改和撤销这个更改。

因此,每当编写 migration 以创建新表时,如果需要撤销该 migration ,我们还需要提供 删除该表的 SQL 。

生成基本骨架

我们将使用 diesel 的 cli 来生成我们的第一个 migration :

$ diesel migration generate task

这将在 ./migrations/ 下创建一个子目录,该子目录以日期、时间戳和后缀 "_task" (你提供给 generate 命令的)。在那个带有时间戳的子目录中有两个 stub 文件,一个是 “up” migration,我们将在其中创建新表,另一个是 “down” migration ,我们将在其中删除新表。

编写 SQL

编写 up.sql 看起来像这样:

CREATE TABLE task (
    id INTEGER NOT NULL,
    title TEXT NOT NULL,
    PRIMARY KEY (id)
);

这将创建一个非常简单的表来存储我们的任务列表。

测试 migration

让我们测试一下我们的 migration:

$ diesel migration run
Running migration 2019-08-19-023055_task
$ echo .dump | sqlite3 testdb.sqlite3

最后一条命令应该显示出我们创建的表,很好!

测试 migration 的另一部分是确保回滚有效。这是通过 redo 命令完成的,该命令将还原最近的一个 migration ,并重新运行它 。

$ diesel migration redo
Rolling back migration 2019-08-19-023055_task
Running migration 2019-08-19-023055_task
Executing migration script
/projects/mytodo/migrations/2019-08-19-023055_task/up.sql
Failed with: table task already exists

不好!我们的 redo 失败了,因为我们忘记了修改 down.sql。我们来修复一下——要还原我们在 up migration 中所作的修改,编写 down.sql 看起来像这样:

DROP TABLE task;

现在尝试再次运行 diesel migration redo ,这次应该成功了。

在这一点上(译者注:即 SQL能力),我们对您掌握得如何并不清楚,但是我们编写了一些代码。一个好消息是:下一个章节将会有一堆代码。

(译者注:以下为多余部分,我也不知为何会多,提交的原文本来没有的)
现在我们已经安装了数据库和 ORM ,我们应该用它们来做些什么,可能是以某种结构化方式存储一些数据 。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~