alembic

alembic是sqlalchemy的作者开发的。
用来做OMR模型与数据库的迁移与映射。

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

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

一.项目开始前就应用
1.alembic 安装

pip install alembic==1.10.4

pip install pymysql==1.0.3

2.alembic用法
先创建好ORM模型
这里默认的sqlalchemy2.0版本

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import DeclarativeBase

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)
DB_URI = 'mysql+pymysql://root:tangsiqi123A@127.0.0.1:3306/test001?charset=utf8mb4'
"""
sqlalchemy2.0版本
"""

engine = create_engine(DB_URI)

class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50), nullable=False)
    age = Column(Integer, nullable=False)

3.进入虚拟环境
4.初始化alembic仓库

alembic init alembic-tst

#注:第一个alembic是alembic语法,
#类似git。第二个init代表初始化,
#第三个alembic代表仓库名,你也可以命名其它名字,
#一般采用了alembic这一名字
我们就可以看到我们的项目下多了一个alembic-tst文件和alembic.ini文件

在这里插入图片描述
5.修改alembic.ini配置文件

sqlalchemy.url = mysql+pymysql://root:tangsiqi123A@127.0.0.1:3306/alembic_demo?charset=utf8mb4

6.修改env.py文件的target_metadata参数
在这里插入图片描述
env.py 修改的部分

import os
import sys
import app

# 把当前项目路径加入到path中
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

target_metadata = app.Base.metadata

7.迁移
创建数据库迁移文件

alembic revision --autogenerate -m “first commit”
在这里插入图片描述

#创建成功会在version目录下创建一个迁移文件
#前面xxx…ad这段代表迁移版本号,后面first_commit代表迁移信息

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

alembic upgrade head

在这里插入图片描述
7.1 这里是针对使用sqlalchemy1.4

pip install sqlalchemy==1.4.48

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)
"""
sqlalchemy1.4版本
"""
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)
 
  1. 重复
    如果以后修改了代码,则重复 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) 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从管易云·奇门到金蝶云星空通过接口配置打通数据

从管易云奇门到金蝶云星空通过接口配置打通数据 对接源平台:管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。 目标系统:金蝶…

ZYNQ:串口-CAN协议转换

前言 目前已经实现zynq的PS-CAN和PL-CAN功能。串口-CAN协议转换是实现以太网-CAN功能的过渡,通过这个流程能够减少后期以太网工程出现问题的频率。阶段性功能目标如下: 实现数据在CAN调试助手和串口调试助手之间的来回转换,从而了解中断机制…

Vue前端对请假模块——请假开始时间和请假结束时间的校验处理

开发背景:Vueelement组件开发 业务需求:用户提交请假申请单,请假申请的业务逻辑处理 实现:用户选择开始时间需要大于本地时间,不得大于请假结束时间,请假时长根据每日工作时间实现累加计算 页面布局 在前…

【Excel PDF 系列】EasyExcel + iText 库

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 文章目录 前言转换前后效果引入 pom 配置代码实现定义 ExcelDataVo 对象主方法EasyExcel 监听器 前言 最近遇到生成 …

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】

动态规划动态规划之第 N 个泰波那契数/三步问题 动态规划LeetCode题目第 N 个泰波那契数求解1求解2(滚动数组) 三步问题求解1求解2(滚动数组) 动态规划 如果问题是由重叠的子问题构成的,那就可以用动态规划&#xff08…

JSON简介以及如何在Python中使用JSON

什么是JSON? JSON是"JavaScript Object Notation"的简称,是一种数据交换格式 JSON格式 假设我们有一个对象,这个对象有两个属性:“name”跟“age”。 在JSON中是这样表达的: { "name":"男孩…

【 C++ 】闭散列哈希表的模拟实现

哈希节点状态 我们都很清楚数组里的每一个值无非三种状态: 如果某下标没有值,则代表空EMPTY。如果有值在代表存在EXIST。如果此位置的值被删掉了,则表示为DELETE。 而这三种状态我们可以借助enum枚举来帮助我们表示数组里每个位置的状态。…

RK3568平台开发系列讲解(基础篇)如何快速学习一套 Linux开发板源码

🚀返回专栏总目录 文章目录 一、基础代码二、驱动代码沉淀、分享、成长,让自己和他人都能有所收获!😄 拿到一份源码和一块评估板,如何快速找到与这块板相关的源码,是很多研发人员都曾遇到过的问题。如果对内核源码结构有大概了解,要完成这些事情也不难,通常可按照基础…

ASLR 和 PIE

前言 ASLR(Address Space Layout Randomization,地址空间随机化)是一种内存攻击缓解技术,是一种操作系统用来抵御缓冲区溢出攻击的内存保护机制。这种技术使得系统上运行的进程的内存地址无法被预测,使得与这些进程有…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的,基于发布/订阅的消息系统,原本开发自 LinkedIn,用作 LinkedIn 的事件流(Event Stream)和运营数据处理管道(Pipeline)的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

事件循环解析

浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后&…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现(核心代码)3.1 项目代码结构3.2 静态填充例子…

全域增长方法论:帮助品牌实现科学经营,助力长效生意增长

前两年由于疫情反复、供给需求收缩等条件制约,品牌业务均受到不同程度的影响。以双十一和618电商大促为例,就相比往年颇显“惨淡”,大多品牌营销都无法达到理想预期。 随着市场环境不断开放,2023年营销行业开始从低迷期走上了高速…

RPA中国 x UiPath | 第六届RPA极客挑战赛,3月16日上海开赛!

随着人工智能技术的不断进步以及数字化转型的深入,企业对于高效、精准、自动化的业务流程需求日益迫切。RPA技术作为连接人类工作与机器操作的桥梁,正逐渐从规则驱动发展为智能决策的助手。 由RPA中国联合UiPath共同主办的【第六届RPA极客挑战赛】将于2…

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目,由API7.ai开发并捐赠。它是一个高性能的云原生API网关,具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口,为用户提供了丰富的功能,包括动态路由、动态上游、动态证书、A…

【LeetCode每日一题】938. 二叉搜索树的范围和

2024-2-26 文章目录 [938. 二叉搜索树的范围和](https://leetcode.cn/problems/range-sum-of-bst/)思路:写法一:在中间累加写法二:在最后累加 938. 二叉搜索树的范围和 思路: 1.在二叉搜索树中:左子树的结点都小于根节…

【Excel PDF 系列】POI + iText 库实现 Excel 转换 PDF

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 文章目录 前言转换前后效果引入 pom 配置代码实现 前言 最近遇到生成 Excel 并转 pdf 的需求,磕磕碰碰总…

UE5 C++ Widget练习 Button 和 ProgressBar创建血条

一. 1.C创建一个继承Widget类的子类, 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版,省的安装。。解压到任意位置,备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…