Django和Flask的数据库迁移

在很多时候,在我们设计好模型之后,又需要进行一定的改变和更新数据操作,最直接的方式就是删除原来的旧表,但是随之而来的问题就是我们之前的 数据也会删除;那怎么办呢,这时候就需要数据库迁移框架了。

Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供 数据库管理与迁移支持
Alembic 使用 SQLAlchemy 作为数据库引擎,为关系型数据提供创建、管理、更改和调用的管理脚本,协助开发和运维人员在系统上线后对数据库进行在线管理。

Alembic 使用 SQLAlchemy 作为数据库引擎,为关系型数据提供创建、管理、更改和调用的管理脚本,协助开发和运维人员在系统上线后对数据库进行在线管理。

Alembic 提供了一种更新 / 删除表,更改列名和添加新约束的方法。

基本操作

安装alembic
pip install alembic

初次使用时,需要初始化,该命令会创建迁移环境和 alembic.ini 文件、env.py文件
alembic init migrations

修改 env.py 的配置,改变 sqlalchemy.url 值,配置数据库连接。
sqlalchemy.url = driver://user:pass@localhost/dbname

生成迁移脚本。命令会产生一个数据库迁移脚本。
--autogrenerate 选项参数来生成自动迁移脚本。-m  选项增加了版本信息
alembic revision --autogenerate -m "comment"

变更数据库

Alembic 最重要的功能是自动完成数据库的迁移「变更」,所做的配置以及生成的脚本文件都是为数据的迁移做准备的,数据库的迁移主要用到 upgrade 和 downgrade 子命令。

数据看的变更主要用到以下命令:

alembic upgrade head:将数据库升级到最新版本。

alembic upgrade <version>:将数据库升级到指定版本。
alembic downgrade <version>:将数据库降级到指定版本。

alembic downgrade base:将数据库降级到最初版本。

alembic upgrade +2:相对升级,将数据库升级到当前版本后的两个版本。
alembic downgrade +2:相对降级,将数据库降级到当前版本前的两个版本。

以上所有的升降级方式都是在线方式实时更新数据库文件,实际环境中总会存在一些环境无法在线升级,Alembic 提供了生成 SQL 脚本的形式,已提供离线升降级的功能。

alembic upgrade <version> --sql > migration.sql
或
alembic downgrade <version> --sql > migration.sql

查看当前版本

查看线上数据库处于什么版本
alembic current

查看项目目录中的迁移脚本信息
alembic history

参考文档:
https://zhuanlan.zhihu.com/p/90106173

https://www.jianshu.com/p/41af05e98bfd

在 Flask 可以通过 Flask-Migrate 快速集成 Alembic 的支持。

Flask-Migrate 是使用 Alembic 处理 Flask 应用中数据库「使用 SQLAlchemy
ORM」迁移的扩展库。其内置了 Click 命令行程序,在 Flask 上可直接使用命令行工具进行数据库的迁移。关于 Click
的使用请参考 Python 命令行神器 Click。

Flask-Migrate 支持使用 pip 进行安装:

安装
pip install Flask-Migrate

初始化项目,命令运行之后会在项目中生成 migrations 文件夹
flask db init

使用 migrate 命令来生成迁移文件
flask db migrate -m "Initial migration."

应用该迁移到数据库
flask db upgrade

查看所有可用命令
flask db --help

Flask-Migrate 安装完成后,会在 Flask 应用程序的命令下自动生成一个 db 子命令,我们通过该命令即可完成数据的操作。
Flask-Migrate 的用法和 Alembic 类似,只是将 alembic 换成了你的应用名称「或 flask」+ db 的方式。

以后对model的每一次修改需要重复 migrate 和 upgrade 命令。如果要在不同机器之间同步数据库结构,只需要同步migrations 文件夹,并且在另一台机器上运行 flask db upgrade 即可。

参考文档:
https://einverne.github.io/post/2018/05/flask-migrate-tutorial.html
https://flask-migrate.readthedocs.io/en/latest/

Flask-Migrate是用于使用Alembic处理Flask应用程序的SQLAlchemy数据库迁移的扩展。通过Flask命令行界面可以使用数据库操作。

为什么直接使用Flask-Migrate与Alembic?
Flask-Migrate是一个扩展,它以正确的方式配置Alembic以与Flask和Flask-SQLAlchemy应用程序一起使用。就实际的数据库迁移而言,所有事情都由Alembic处理,因此您可以获得完全相同的功能。

总结,迁移数据库的主要思路均为:

1&#xFF1A;&#x4FEE;&#x6539;&#x6570;&#x636E;&#x6A21;&#x578B;

2&#xFF1A;&#x751F;&#x6210;&#x8FC1;&#x79FB;&#x6587;&#x4EF6;

3&#xFF1A;&#x6267;&#x884C;&#x8FC1;&#x79FB;

Django框架内部就集成了数据库迁移模块
以下是几个常用的与迁移交互的命令,即 Django 处理数据库架构的方式:

基本语法:
python manage.py xx [app_name]

xx如下:
makemigrations,基于模型的修改创建迁移文件。

migrate,负责应用和撤销迁移到数据库。

sqlmigrate,展示迁移使用的 SQL 语句。

showmigrations,列出项目的迁移和迁移的状态。

示例语句如下:

生成迁移文件 (加上app_name可只修改某个app的表结构变化)
$ python manage.py makemigrations [app_name]

将修改应用至数据库
$ python manage.py migrate [app_name]

如果想看迁移文件的执行状态:
$ python manage.py showmigrations

如果想要精确到某个迁移文件(0004_xxx.py):
$ python manage.py migrate app_name 0004

你应该将迁移看作是数据库架构的版本控制系统。 makemigrations 负责将模型修改生成独立的 迁移文件——类似提交修改,而 migrate 负责将表结构的变动其 应用至数据库

每个应用的迁移文件位于该应用的 “migrations” 目录中,他们被设计成应用代码的一部分,与应用代码一起被提交,被发布。你只需在开发机上构建一次,就可以在同事的电脑或测试机上运行同样的迁移而保证结果一致。最后在生产环境运行同样的迁移。

参考文档:
https://docs.djangoproject.com/zh-hans/3.2/topics/migrations/

Original: https://blog.csdn.net/m0_50294260/article/details/117255706
Author: 棉花糖0001
Title: Django和Flask的数据库迁移

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737512/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球