flask使用alembic,进行数据库结构管理,升级,加表,加项

Posted 上官飞鸿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask使用alembic,进行数据库结构管理,升级,加表,加项相关的知识,希望对你有一定的参考价值。

1.安装扩展,在虚拟环境中安装 alembic,不懂可以去看pycharm的系列文章。

2.初始化, 使用 Alembic 前需要通过 alembic init 命令创建一个 alembic 项目,该命令创建一个 alembic.ini 配置文件和一个 alembic 档案目录(YOUR_ALEMBIC_DIR)。

一般命令是 alembic init migrate

我这windows环境,又不想设置那么多环境变量,用pycharm,

参考以下配置:

File--Settings--tools--External Tools

用右边的加号自己创建一个新的。

Name是你会在菜单里看到的。如果想用下划线,多给几个吧,一个下划线,看不清楚

Program:是alembic的位置,这个是我的虚拟环境中alembic的位置。

Parameters:就是可选的命令参数了。

Working directory:就是执行这个命令的位置。

Group:你可以为你的这个项目起个名字,作为一个组存在你的菜单。有时候写多个项目,运行错可不好。

这是刚才设置的效果

试着运行一下吧。

会在项目文件夹下生成migrate目录和alembic.ini文件

3.配置:

修改alembic.ini,配置数据库连接。

注释掉原来的,写上我们自己的。路径以项目路径为开始,也就是我们设置的工作目录

;sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url =sqlite:///Plan.db

 

配置migrate/env.py,配置数据模型。

# target_metadata = None
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
from config.DBconfig import Base
target_metadata = Base.metadata

找到自己的路径,然后引入sqlalchemy 的Base

如果有多个models

...
from models import page, tag
target_metadata = [page.Base.metadata, tag.Base.metadata]
...

4.生成升级数据库的脚本文件

alembic revision --autogenerate

5.执行升级

alembic upgrade head

声成脚本和执行升级都可以按init命令写进pycharm的扩展。

 

 

 

暂时使用的是sqlite3  不支持DROP命令,但是改名的时候,自动化命令是这样的:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column(\'carriage\', sa.Column(\'last_A66\', sa.DateTime(), nullable=True))
    op.drop_column(\'carriage\', \'last_A6\')
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column(\'carriage\', sa.Column(\'last_A6\', sa.DATETIME(), nullable=True))
    op.drop_column(\'carriage\', \'last_A66\')
    # ### end Alembic commands ###

alembic 是删除一条,再键一条,暂时也不研究了。

记得不要删除和更名,增加条目就一切正常。

弃用条目就好了。

 

以上是关于flask使用alembic,进行数据库结构管理,升级,加表,加项的主要内容,如果未能解决你的问题,请参考以下文章

使用Flask-Migrate进行管理数据库升级

使用Flask-Migrate进行管理数据库升级

flask项目结构使用sqlalchemy和alembic

flask数据库之alembic的使用

使用alembic进行数据库版本管理

使用alembic进行数据库版本管理