数据库迁移
数据库迁移
简介
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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
          
 Masonite 中文文档
            
            
                关于 LearnKu