• 【alembic】数据库迁移工具


    好风凭借力,送我上青云。

    安装

    pip install alembic -i https://pypi.doubanio.com/simple
    

    使用步骤

    1.定义模型

    from sqlalchemy import Column, String, Integer, create_engine
    from sqlalchemy.ext.declarative import declarative_base
    
    HOSTNAME = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'alembic'
    USERNAME = 'root'
    PASSWORD = 'root'
    DB_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
    
    # 创建引擎
    engine = create_engine(DB_URI)
    
    Base = declarative_base(engine)
    
    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer, primary_key=True, autoincrement=True)
        name = Column(String(length=50), nullable=False)
        age = Column(Integer, nullable=False)
    
    1. engine = create_engine(DB_URI):创建引擎,相当于连接到数据库
    2. Base = declarative_base(engine):绑定引擎
    3. class User(Base)::定义模型关联Base

    2. 创建仓库

    alembic init [仓库的名字,推荐使用alembic]

    # ydongy @ ydongy-PC in ~/Code/flask_project/alembic [16:57:31] 
    $ alembic init alembic
      Creating directory /home/ydongy/Code/flask_project/alembic/alembic ...  done
      Creating directory /home/ydongy/Code/flask_project/alembic/alembic/versions ...  done
      Generating /home/ydongy/Code/flask_project/alembic/alembic/README ...  done
      Generating /home/ydongy/Code/flask_project/alembic/alembic/script.py.mako ...  done
      Generating /home/ydongy/Code/flask_project/alembic/alembic.ini ...  done
      Generating /home/ydongy/Code/flask_project/alembic/alembic/env.py ...  done
      Please edit configuration/connection/logging settings in '/home/ydongy/Code/flask_project/alembic/alembic.ini' before proceeding.
    (flask_project) 
    # ydongy @ ydongy-PC in ~/Code/flask_project/alembic [16:57:46] 
    $ 
    

    假如输入命令alembic init alembic,会在当前的目录创建一个alembic的文件夹,层级关系以及文件结构如下:

    .
    ├── alembic
    │   ├── env.py
    │   ├── README
    │   ├── script.py.mako
    │   └── versions
    ├── alembic.ini
    ├── models.py
    

    3.修改配置文件

    修改alembic.ini:

    # sqlalchemy.url = driver://user:pass@localhost/dbname
    sqlalchemy.url = mysql+pymysql://root:root@localhost/demo?charset=utf8
    

    根据自己使用的数据库配置数据库的相关信息,以及数据库连接引擎,此处使用的是mysql+pymysql

    修改alembic/env.py

    import sys,os
    # 添加模块查找路径
    sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    
    # target_metadata = None
    target_metadata = Base.metadata
    
    • 添加模块查找路径是要找到我们的Base = declarative_base(engine)
    • target_metadata = None修改成Base.metadata

    一般这一步容易出错,大部分就是没有添加好模块路径

    4. 生成迁移脚本

    alembic revision --autogenerate -m 'message'
    

    message:表示描述信息,类似于git提交时的描述信息

    5. 将迁移脚本映射到数据库

    alembic upgrade head
    

    常用命令

    命令 描述
    init 创建一个alembic仓库。
    revision 创建一个新的版本文件。
    --autogenerate 自动将当前模型的修改,生成迁移脚本。
    -m 本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
    uprade 将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
    [head] 代表最新的迁移脚本的版本号。
    downgrade 会执行指定版本的迁移文件中的downgrade函数。
    heads 展示head指向的脚本文件版本号。
    history 列出所有的迁移版本及其信息。
    current 展示当前数据库中的版本号。
  • 相关阅读:
    Unity Shader 之 uv动画
    c++源文件后缀名问题
    Unity Shader 之 透明效果
    正则表达式
    Unity Shader基础
    Unity Shader 之 渲染流水线
    2017/11/22 Leetcode 日记
    2017/11/21 Leetcode 日记
    2017/11/13 Leetcode 日记
    2017/11/20 Leetcode 日记
  • 原文地址:https://www.cnblogs.com/ydongy/p/13158095.html
Copyright © 2020-2023  润新知