数据库迁移

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

数据库迁移

简介

Masonite 中的数据库迁移与其他 Python 框架非常不同。其他 Python 框架基于以前使用 Data Mapper 类型 ORM 的模型创建迁移。由于 Masonite 默认使用 Active Record ORM,迁移与模型完全分离。这很好,因为它允许无缝切换 ORM,而不会干扰迁移。除了创建迁移和模型的这种分离之外,它还使管理模型和表之间的关系变得非常基本,几乎没有什么魔力,这会导致更快的调试和更少的迁移问题。

在本文档中,我们将讨论如何使用 Masonite 进行迁移。

配置

确保将所有数据库的凭据和驱动程序放入.env文件中。该文件在您的.gitignore文件中,因此请确保不要将该文件提交给源代码管理。

MySQL

如果您使用的是MySQL,则可以安装:

$ pip install mysqlclient

或者:

$ pip install PyMySQL

Postgres

Postgres 数据库只有一个选包选项:

$ pip install psycopg2

SQLite

如果您使用SQLite,请使用以下选项配置.env文件

.env

...
DB_CONNECTION=sqlite
DB_DATABASE=masonite
DB_LOG=True
...

您的sqlite数据库将在项目根目录中创建。

入门

在开始使用 ORM 之前,您会收到一条异常消息,指出您需要为数据库驱动程序安装一个必需的软件包。

因为模型和迁移是分开的,所以我们不必为了修改数据库表而修改模型。为了进行迁移,我们可以运行craft 命令:

$ craft migration name_of_migration_here --table dashboard

此命令将为现有表创建迁移。现有表上的迁移将以某种方式迁移到数据库中,因此在命令中指定 -table 标志非常重要。
为尚不存在的新表创建迁移文件,您可以改为使用 -create 标志,如下所示:

$ craft migration name_of_migration_here --create dashboard

这将创建一个即将创建的表的迁移,并迁移您指定的列。

迁移列

在迁移文件中,您将看到 up() 方法和 down() 方法。我们只对 up() 方法感兴趣。此方法指定执行迁移操作时要做的事情。down() 方法是回滚迁移时执行的方法。让我们逐步创建一个博客迁移。

我们可以使用 Orators Schema Builder 来构建我们的迁移文件。首先让我们运行一个 craft 迁移命令来创建博客表:

$ craft migration create_blogs_table --create blogs

这将在 databases/migrations 目录下创建一个迁移文件. 让我们打开文件并添加一些列。
文件内容如下:

def up(self):
        """
       运行迁移
        """
        with self.schema.create('blogs') as table:
            table.increments('id')
            table.timestamps()

在with语句中,我们可以开始添加列。

让我们继续并添加一些用于博客表的列。

def up(self):
        """
        运行迁移
        """
        with self.schema.create('blogs') as table:
            table.increments('id')
            table.string('title')
            table.text('body')
            table.integer('active')
            table.integer('user_id').unsigned()
            table.foreign('user_id').references('id').on('users')
            table.timestamps()

让我们继续分解一下我们刚刚创建的内容。

注意,我们使用了上下文处理器,这是我们的 schema 构建器。我们只需要关注里面的内容。请注意,我们有一个 table 对象,该对象具有一些与列相关的方法。这些列中的大多数显而易见,您可以阅读有关 Oator Schema Columns 的信息。我们将在这里提到外键。

外键

Orator 在其网站上有一些不错的文档,所以添加列很简单。为了添加外键,我们需要指定一个无符号整数列。

table.integer('user_id').unsigned()

这将设置我们的列索引以备当外键使用。我们可以通过键入以下内容轻松指定外键:

table.foreign('user_id').references('id').on('users')

这样做是在 user_id 列上设置外键,该外键引用 users 表上的 id 列。设置外键非常简单并且好理解。

有关迁移更多的信息请查看 Orator 文档 文档。

更改列

在开发应用程序的过程中,我们将需要更改两种类型的列。更改列非常简单。如果您使用的是 MySQL 5.6.6 及更低版本,请参见以下警告。

要更改列,我们可以在其上使用 .change() 方法。由于我们需要创建一个新的迁移来执行此操作,因此我们可以执行以下操作:

$ craft migration change_default_status --table dashboard

然后只需创建一个新的迁移,但使用.change()方法让 Masonite 更改现有列,而不是添加新列:

table.integer('status').nullable().default(0).change()

我们运行craft migration时,它将更改该列,而不是添加新列。

更改 MySQL 5.6.6 之前的外键

由于外键对 MySQL 5.6.6 之前的列上施加的限制,因此它不像在外键列上附加一个.change()那样简单。我们必须首先:

  • 删除外键关系
  • 更改列
  • 重新创建外键

我们可以简单地这样做:

table.drop_foreign('posts_user_id_foreign')
table.rename_column('user_id', 'author_id')
table.foreign('author_id').references('id').on('users')

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

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/or...

译文地址:https://learnku.com/docs/masonite/2.3/or...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~