数据库迁移
数据库迁移
简介
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')
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。