zoukankan      html  css  js  c++  java
  • 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 是删除一条,再键一条,暂时也不研究了。

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

    弃用条目就好了。

  • 相关阅读:
    关于pandas里面的合并
    关于动态规划的一丢丢研究
    结巴分词详细讲解
    k折交叉验证
    Boosting和Bagging的异同
    批量归一化的原理
    深度学习模型参数初始化的方法
    NLP 装桶(Bucketing)和填充(padding)
    facebook 摘要生成阅读笔记(二) Abstractive Sentence Summarization with Attentive Recurrent Neural Networks
    facebook 摘要生成阅读笔记(一) A Neural Attention Model for Sentence Summarization
  • 原文地址:https://www.cnblogs.com/jackadam/p/8157602.html
Copyright © 2011-2022 走看看