Loading

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 是删除一条,再键一条,暂时也不研究了。

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

弃用条目就好了。

 

posted @ 2017-12-31 13:52  上官飞鸿  阅读(1354)  评论(0编辑  收藏  举报