alembic迁移

news2025/1/20 22:44:26

alembic 作用

alembic是sqlalchemy的作者开发的。用来做OMR模型与数据库的迁移与映射。alembic使用方式跟git有点了类似,表现在两个方面。

第一个,alembic的所有命令都是以alembic开头
第二,alembic的迁移文件也是通过版本进行控制的。首先,通过pip install alembic进行安装。

以下将解释alembic的用法
方便数据库与ORM模型的迁移与映射

一.项目开始前就应用

1.alembic 安装

pip install alembic==1.10.4

2.alembic用法

先创建好ORM模型

from sqlalchemy import create_engine,Column,String,Integer
from sqlalchemy.ext.declarative import declarative_base
 
DIALCT = "mysql"
DRIVER = "pymysql"
USERNAME = "root"
PASSWORD = "123456"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "alembic_demo"
 
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
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(50) , nullable=False)
 
 

3.进入虚拟环境

4.初始化alembic仓库

alembic init alembic
#注:第一个alembic是alembic语法,
#类似git。第二个init代表初始化,
#第三个alembic代表仓库名,你也可以命名其它名字,
#这里为了方便理解,所以采用了alembic这一名字

我们就可以看到我们的项目下多了一个alembic文件和alembic.ini文件

在这里插入图片描述

5.修改alembic配置文件

sqlalchemy.url = mysql+pymysql://root:123456@localhost/alembic_demo
#注:和数据库连接信息一样

6.修改env.py文件的target_metadata参数

在这里插入图片描述

import os
import sys
import alembic_demo
 
# 把当前项目路径加入到path中
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
 
target_metadata = alembic_demo.Base.metadata

7.迁移

创建数据库迁移文件

alembic revision --autogenerate -m "first commit"
#创建成功会在version目录下创建一个迁移文件
#前面xxx...ad这段代表迁移版本号,后面first_commit代表迁移信息

在这里插入图片描述

将迁移文件映射到数据库中

alembic upgrade head

出现下方信息,说明成功映射到表中
在这里插入图片描述在这里插入图片描述

注:alembic映射到数据库流程,ORM模型 ——迁移文件——映射到数据库中

8. 重复

如果以后修改了代码,则重复 7 的步骤。

9.常用命令和参数

  • init:创建一个alembic仓库。
  • revision:创建一个新的版本文件。
  • –autogenerate:自动将当前模型的修改,生成迁移脚本。
  • -m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
  • upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
  • [head]:代表最新的迁移脚本的版本号。
  • downgrade:会执行指定版本的迁移文件中的downgrade函数。
  • heads:展示head指向的脚本文件版本号。
  • history:列出所有的迁移版本及其信息。
  • current:展示当前数据库中的版本号。

另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。

- 更新数据库 	`alembic upgrade 版本号`
- 更新到最新版 	`alembic upgrade head`
- 降级数据库 	`alembic downgrade 版本号` 
- 更新到最初版 	`alembic downgrade head`
alembic upgrade 版本号 --sql > migration.sql####离线更新(生成sql) 

二.项目开发到一半用alembic库

1.数据库字段类型和代码字段类型不一致

2.表中有数据了改代码,数据会不会丢失

待更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/527540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java版Spring Cloud+SpringBoot+mybatis+uniapp b2b2c 多商户入驻商城 直播 电子商务

J2EE企业分布式微服务云快速开发架构 Spring CloudSpring Boot2MybatisOauth2ElementUI 前后端分离 1. 鸿鹄Cloud架构清单 2. Commonservice(通用服务) 通用服务:对spring Cloud组件的使用&封装,是一套完整的针对于分布式微…

程序员加班一周总结出可视化大屏效果,9种炫酷组件打包带走!

前段时间参加行业分享交流会,听各位大佬的经验传授,其中有一位用一个极度炫酷的可视化大屏进行展示,可谓是让人眼前一亮。我总是在冲浪的时候看到大屏内容,现场的亲眼目睹大屏真是无比震撼的,于是我马上抓住机会向人家…

Quarkus + mybatis + mybatis-generator 使用总结

Quarkus mybatis mybatis-generator 使用总结 大纲 1 Quarkus结合mybatis 2 Quarkus手动配置数据源 3 Quarkusmybatis的使用 4 使用mybatis-generate 5 使用mybatis-generate后的问题 基础说明 1 开发环境 window112 GraalVM 版本22.3.0 3 quarkus 版本 2.13.7.Final4 myb…

【小韬讲存储】——自动精简配置

ChatGPT全球大火 网友们纷纷登陆尝试它的功能 面对五花八门的问题,ChatGPT都能够给出高情商答案 而答案的背后是百TB数据的分析、训练 对于百TB测试数据 企业不会选择一次性购买所需硬件 而是根据实际所需容量进行多次购买 产品背后的百TB数据容量压力 在当前…

火山引擎DataTester:A/B实验平台数据集成技术分享

DataTester的数据集成系统,可大幅降低企业接入A/B实验平台门槛。 当企业想要接入一套A/B实验平台的时候,常常会遇到这样的问题: 企业已经有一套埋点系统了,增加A/B实验平台的话需要重复做一遍埋点,费时费力&#xff1b…

Android Jetpack Compose中derivedStateOf{}与remember{} with keys的区别

Android Jetpack Compose中derivedStateOf{}与remember{} with keys的区别 在这篇短文中,我将清楚地解释derivedStateOf{}和使用带有keys的remember{}之间的区别。阅读完本文后,你将对它们之间的区别有非常清晰的认识。 先决条件 为了理解本文&#xf…

Java实现自定义字段

Java自定义字段 小黄最近在工作中遇到一个比较有意思的需求,在此跟大家分享一下 需求 这个需求是这样的,用户在添加表单时,除了一些固定信息填入之外,还可以自定义一些字段填入,例如一个用户表,默认情况下…

集文字查询、语音识别、拍照识别的垃圾分类系统,多端合一

一、开源项目简介 垃圾识别精灵 是一个 基于 uni-app 开发 微信小程序,使用 SpringBoot2 搭建后端服务,使用 Swagger2 构建 Restful 接口文档,实现了 文字查询、语音识别、图像识别其垃圾分类的功能。 这是一款个人开发的微信小程序&#x…

Python系列之变量和运算符

目录 一、变量 1.1 什么是变量 1.2 变量的特点 1.3 作用域 1.4 变量的命名规则 1.5 变量的定义和使用 1. 变量的定义 2. 两个变量值的交换 1.6 基本数据类型分类 1.7 数据类型转换 1.8 Python是解释型的强类型动态语言 1.8.1 解释型 1.8.2 强类型 1.8.2 动态语言…

Vue3系列——Pinia状态管理库

目录 Pinia 安装、创建 Store 定义Store Option Store Setup Store 使用Store storeToRefs action异步实现 Pinia Pinia是Vue的专属状态管理库,它允许跨组件或页面共享状态,实现和Vuex一样的数据共享,是Vuex状态管理工具的替代品。…

【直播回顾】AIGC产业研究报告2023图像生成篇报告解读

易观:5月9日,易观高级分析师陈晨带来了《AIGC产业研究报告2023图像生成篇》的报告解读,错过直播的朋友敬请观看回顾! 图像作为人工智能内容生成的一种模态,一直在AIGC领域中扮演着重要角色,由于图像生成应用…

1135 Is It A Red-Black Tree(超详细注释+46行代码)

1135 Is It A Red-Black Tree 分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 There is a kind of balanced binary search tree named red-black tree in the data structure. It has the following 5 properties: (1) Every node is either red or blac…

【C++】类和对象(中)---拷贝构造函数、赋值运算符重载

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

MySQL之MHA高可用集群及故障切换

目录 一、MHA概述1.1 MHA 的组成1.2 MHA 的特点1.3 MHA的工作原理1.4 故障切换时MHA会做什么 二、搭建MySQLMHA2.1 实验思路2.2 实验环境、安装包2.3 服务搭建2.3-1 所有服务器挂壁防火墙和安全增强2.3-2 修改 Master、Slave1、Slave2 节点的主机名2.3-3 修改三台MySQL服务器主…

『新星计划 • 数据结构与算法』数据结构学习指南以及在校招中的重要性

文章目录 💐文章导读💐导师自我介绍💐数据结构与算法的重要性🔓在岗位招聘中🔓在校招笔试中🔓在校招面试中🔓在未来工作中 💐数据结构与算法如何学习⤴️学习路线⤵️学习方法↪️几…

tinyWebServer 学习笔记——一、半同步半反应堆线程池

文章目录 一、基础知识1. 服务器编程基本框架2. 五种 I/O 模型3. 事件处理模式4. 半同步/半反应堆模式5. 线程池 二、代码解析1. 线程池类定义2. 线程池创建与回收3. 向请求队列中添加任务4. 线程处理函数5. run 执行任务 参考文献 一、基础知识 1. 服务器编程基本框架 服务器…

软件测试 自动化测试selenium篇(一)

目录 一、什么是自动化测试 单元测试 接口自动化 UI自动化 二、如何实施自动化测试 自动化测试需要了解的技能 三、selenium介绍 webdriver的工作原理: 四、SeleniumJava环境搭建 验证环境是否搭建成功 创建java项目,添加pom文件中添加依赖 常见问…

一些使用树莓派遇到的问题

在长达两个月的实习期,白天去公司实习,晚上回到实验室学习树莓派。终于简单的入门了。来做个总结。 目录 1. wifi问题 树莓派之wifi连接 2.vnc树莓派桌面问题 3.安装库或者下载东西时,域名无法解析。 4.进行安装或者操作时&#xff0c…

【Java多线程编程】解决线程的不安全问题之volatile关键字

目录 1. 造成线程不安全的代码 2. volatile能保证内存可见性 3. synchronized与volatile的区别 3.1 synchronized能保证原子性 3.2 volatile不能保证原子性 1. 造成线程不安全的代码 有一代码,要求两个线程运行。并自定义一个标志位 flag,当线程2&…

UVM学习——搭建简单的UVM平台

引言 本专栏的博客均与 UVM 的学习相关,学习参考: 【1】UVM Tutorial 【2】张强著,UVM实战 (卷 Ⅰ) 【3】Download UVM (Standard Universal Verification Methodology) 本专栏的学习基本依照 资料【2】的主线&#…