Alembic生成数据库迁移脚本
简介
Alembic基于python实现,用于对数据库生成迁移脚本,实现自动化升级数据库(如加入新字段,修改字段等)或降级数据库(回退到之前的版本)。通常与sqlalchemy库一起使用。具体信息见官方文档
使用
安装alembic
pip install alembic在项目文件下进行初始化
alembic init alembic
初始化后项目文件夹下会新增
alembic
文件夹和alembic.ini
的文件修改alembic.ini配置文件
配置数据库迁移路径,即将模型数据创建在此DB中
sqlalchemy.url = mysql+pymysql://root:root@localhost/db_1
修改
alembic/env.py
文件非常重要:include_object函数的作用是防止该DB中的其他表加入到迁移脚本(通常是删除操作),简单讲就是迁移脚本只作用于当前模型文件的表,当然如果sqlalchemy.url指向的DB是空表,可忽略此函数
可根据模型文件或已存在的数据库生成迁移脚本
# 1. 根据模型文件的情况 import sys # # 根据自己模型文件的路径加载 sys.path.insert(0, "..") from simple_test import models metadata = models.Base.metadata# 2. 根据已存在的数据库生成迁移脚本的情况 from sqlalchemy.schema import MetaData from sqlalchemy import create_engine # # 注意此数据库连接不可与alembic.ini中的一样,否则迁移脚本无操作 engine = create_engine('mysql+pymysql://root:root@localhost/db_0') metadata = MetaData(engine) # # only参数可传入指定的数据库表名列表,表示只对这些表生成迁移脚本,否则就对DB中的全表生成 metadata.reflect(only=["users"])# # 以上两种方式根据需要选择其中一种即可target_metadata = metadatadef include_object(object, name, type_, reflected, compare_to):""":param object: 一个SchemaItem对象,如Table, Column, Index, UniqueConstraint, ForeignKeyConstraint等:param name: 该对象的名称:param type_: 该对象的类型,表对象="table",字段对象="column",索引对象="index",唯一约束="unique_constraint",外键约束="foreign_key_constraint":param reflected: True=基于表反射产生(即从数据库中加载的表)False=该对象来自本地模型数据,即models.Base.metadata:param compare_to: 与之比较的对象,没有则是None:return: bool"""return not reflected # 表示对从数据库中加载的表不加入到迁移脚本中# run_migrations_offline函数(测试环境)和run_migrations_online函数(线上环境)修改 with connectable.connect() as connection:context.configure(connection=connection, target_metadata=target_metadata,# 加入以下此行include_object=include_object,)
使用模型文件时的models.py文件:
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationshipfrom .database import Baseclass User(Base):__tablename__ = "users"id = Column(Integer, primary_key=True, index=True)email = Column(String(100), unique=True, index=True)hashed_password = Column(String(200))is_active = Column(Boolean, default=True)name = Column(String(50), unique=True)
生成迁移脚本文件
alembic revision --autogenerate -m "first commit"
可以看到alembic/versions/文件夹下生成了一个py文件,里面有两个函数用于升级数据库和降级数据库,可根据需要修改。
更新到最新的版本
alembic upgrade head
以后添加字段,直接在模型文件中添加,然后重复第5步和第6步即可。
Alembic生成数据库迁移脚本相关推荐
- 完美解决Flask-Migrate使用SQLite生成自动迁移脚本的Bug
一.问题描述 flask-migrate插件是对Alembic的简单封装,当程序使用SQLite数据库作为backend的时候,使用 flask migrate命令生成自动迁移脚本,使用flask u ...
- pd 生成mysql 脚本_PowerDesigner 如何生成数据库更新脚本
最近在学习使用PowerDesigner 这个数据库设计工具,发现真的很强大,可以做很多事情,其中就涉及到如果数据库要进行更新了怎么办,主要是增加表,最麻烦的是修改字段名称,增加字段等操作,遇到主要的 ...
- python脚本迁移数据库_Django 数据库迁移脚本
django修改模型后更新数据库 当django改变模型过后,需要重新更新数据库,更新方法如下 比如app的名字是rango python manage.py makemigrations rango ...
- PowerDesigner16(PDM)pd生成数据库sql脚本
今天使用PowerDesigner16软件生成数据库脚本的时候遇到了一些问题,但是经过不懈努力最终修成正果,下面将小编的经历以及错误解决方案与大家分享. 生成sql脚本步骤 第一步:选择Datavas ...
- Flask 中的数据库迁移
Flask 中的数据库迁移 在我之前使用 Flask 实现简单接口时,为了方便,我每次都会将数据表删除掉,然后重新创建表和添加数据.因为测试数据只有几条,所以可以使用删表重建的方式,但在实际的项目中, ...
- python数据库迁移命令_Python 数据库迁移工具 Alembic
Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供数据库管理与迁移支持. Alembic 的应用 Alembic 使用 SQLAlchemy 作为 ...
- alembic数据库迁移功能初步解析
创建一个新的数据库迁移脚本 alembic revision –-autogenerate -m "initdb2" --head head (这段代码一定要手动输入) 下面的命令 ...
- python 魔兽世界升级脚本_Python 实现数据库更新脚本的生成方法
我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了 ...
- PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
PowerDesigner–创建概念数据模型 Conceptual Data Model 概念数据模型(CDM)帮助您分析信息系统的概念结构,以识别要表示的主要实体.它们的属性以及它们之间的关系. C ...
最新文章
- SD-WAN将成为物联网部署中的骨干网—Vecloud
- code Gym 100500D 	T-shirts(暴力)
- 09Mybatis_入门程序——删除用户以及更新用户
- 用Python对数学函数进行求值、求偏导
- 六十六、丑数系列,丑的颠覆我的思想
- 上一局APP玩,你画我猜,作为灵魂画手从没服过谁
- Servlet_3.0注解配置
- 综合布线故障排除和诊断—DSX-600
- sqlserver启用登陆审计
- dem聚类只能成为一类
- 7 php 内存泄漏_PHP 内存泄漏分析定位
- GitHub上Star 量最高的 5 个机器学习项目
- 堆排序python代码实现_八大排序算法的python实现(五)堆排序
- python的除法_python中的除法
- 亚马逊吸尘器需要提交UL1017测试报告,亚马逊要求提供ISO17025资质机构出具的UL报告
- 概率论与数理统计期末复习(仅供参考)
- 计算机组装与维护公开课,计算机组装与维护公开课教案
- 运维工程师绩效考核表_IT运维绩效考核表
- word中批量调整图片大小的方法
- android数据恢复实现,5款免费的Android数据恢复应用