alembic - Alembic:更新以前的版本是否有益?
问题描述
我是 Alembic 的新手,所以如果我遗漏了什么,我深表歉意,但我很难理解我的前任的一些方法。
我的前任(在我公司)在版本/目录中有一系列修订文件。如果需要更改数据库模式,他将对现有的修订文件进行更改并将其签入源代码控制。例如,要调整列的大小,将更改现有的 create_table() 函数,如下所示:
op.create_table(
'mytable',
id(),
sa.Column('name', sa.VARCHAR(50)),
...对此:
op.create_table(
'mytable',
id(),
sa.Column('name', sa.VARCHAR(100)),
有什么方法可以成为使用 Alembic 的有用或有益的方式,但我不知道,因为我是新手?这不是完全违背了使用 Alembic 的目的吗?
解决方案
每当我们在下面创建新的修订文件时,它将是通用模式,即它将具有升级和降级功能。
"""create mytable table
Revision ID: 3975ea83b745
Revises:
Create Date: 2021-05-21 23:48:27.038406
"""
# revision identifiers, used by Alembic.
revision = '3975ea83b745'
down_revision = None
branch_labels = None
from alembic import op
import sqlalchemy as sa
def upgrade():
# create table mytable
pass
def downgrade():
# drop table mytable if exists
pass
更改现有脚本不是一个好习惯,因为您需要降级到相应的修订 ID(在这里您将丢失数据)并使用新更改再次升级,显然您不想降级生产中的完整版本。例如,在这种情况下,“mytable”将首先降级,然后用新的更改升级它。
作为 alembic,调用关系数据库的变更管理脚本。对于新更改,请创建新修订并在那里添加更改。所以在这种情况下,它将改变现有表的列的数据类型。
推荐阅读
- php - PHP - 在创建帖子/图像关系时通过嵌套数组创建新数组
- mongodb - mongo 聚合函数不适用于套接字 io
- javascript - 浏览器中加载的 JavaScript/PHP 问题
- android - 通过 Retrofit 将数据存储到 Realm 中
- c# - 循环参考——架构问题
- documentation - TOGAF 文档映射
- c# - Xamarin 中的自动缩放标签字体大小
- javascript - Google Charts 条形图/柱形图 getColumnRange() 来自 DataView 的意外值
- kotlin - Kotlin async/await 语法不阻塞调用者
- node.js - 续集选择并包含另一个表别名