当前位置: 首页 > 工具软件 > alembic > 使用案例 >

alembic数据库迁移功能初步解析

隆兴修
2023-12-01
  • 创建一个新的数据库迁移脚本
    alembic revision –-autogenerate -m "initdb2" --head head (这段代码一定要手动输入)

  • 下面的命令可以看到,migration/versions目录下,多出来一个55开头的py文件,555a49f2bef0就是版本号(77开头的是我创建的第一个版本)。

    (venv) dorlolo@site: ls migration/versions/
    555a49f2bef0_initdb2.py  771061e04df8_initdb.py  __pycache__
    
  • 使用命令查看文件内容 vim migration/versions/555a49f2bef0_initdb2.py

    """initdb2    #当前版本名称
    
    Revision ID: 555a49f2bef0   #当前版本
    Revises: 771061e04df8		#上一个版本
    Create Date: 2021-06-02 09:33:41.287367
    
    """
    from alembic import op
    import sqlalchemy as sa
    
    
    # revision identifiers, used by Alembic. 意为如果回退的话回到哪个版本
    revision = '555a49f2bef0'         #当前版本
    down_revision = '771061e04df8'    #上一个版本
    branch_labels = None
    depends_on = None
    
    #执行alembic upgrade 命令调用的方法 
    def upgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        pass
        # ### end Alembic commands ###
    
    #降级数据库方法,内容自行填写
    def downgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        pass
        # ### end Alembic commands ###
    
    
  • 修改案例:

    from alembic import op
    import sqlalchemy as sa
    
    # revision identifiers, used by Alembic.
    revision = '555a49f2bef0'         #当前版本
    down_revision = '771061e04df8'    #上一个版本
    branch_labels = None
    depends_on = None
    
    #执行alembic upgrade 命令调用的方法 
    def upgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        op.create_table('users',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('name', sa.String(length=100), nullable=True, comment='姓名'),
        sa.Column('sex', sa.String(length=100), nullable=True, comment='性别'),
        sa.Column('age', sa.Text(), nullable=True, comment='备注年龄),
        sa.Column('idcard', sa.String(length=100), nullable=True, comment='证件号码'),
        sa.Column('update_time', sa.DateTime(), nullable=True, comment='更新时间'),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('name'),
        sa.UniqueConstraint('idcard'),
        )
        # ### end Alembic commands ###
    
    #降级数据库方法,内容自行填写
    def downgrade():
        # ### commands auto generated by Alembic - please adjust! ###
        op.drop_table('daq_channel')
        # ### end Alembic commands ###
    

此时alembic更新数据库的命令用法就一目了然了

- 更新数据库 	`alembic upgrade 版本号`
- 更新到最新版 	`alembic upgrade head`
- 降级数据库 	`alembic downgrade 版本号` 
- 更新到最初版 	`alembic downgrade head`

实际使用遇到的问题

我将项目代码上传至服务器后,使用alembic upgrade 771061e04df8命令提示执行成功,单没有创建upgrade方法中的数据表。
经过多次尝试,按照如下步骤即可解决:
使用alembic revision –-autogenerate -m "initdb2" --head head命令新建一个版本,
然后将upgreade方法复制过去。
接着执行alembic upgrade head,最后终于成功创建新表了。

 类似资料: