SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具

SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
- 一、SQLAIchemy的介绍
- 二、数据库引擎
- 1、支持的数据库
- 1.1、sqlite数据库
- 1.2、MySQL数据库
- 1.3、数据库引擎的参数
- 三、定义模型类
- 1、定义模型
- 2、engine负责数据库迁移
- 四、alembic数据库迁移⼯具
- 1、安装alembic
- 2、初始化alembic环境
- 3、修改配置和环境
- 4、执⾏命令
一、SQLAIchemy的介绍
SQLAlchemy 是 Python 生态系统中最流行的 ORM。SQLAlchemy 设计非常优雅,分为了两部分——底层的 Core 和上层的传统ORM。在 Python 乃至其他语言的大多数 ORM 中,都没有实现很好的分层设计,比如 django 的 ORM,数据库链接和 ORM 本身完全混在一起。

SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。
SOLAIchemy对象关系映射器提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实例与其对应表中的行相关联。它包括一个透明地同步对象及其相关行之间状态的所有变化的系统,称为工作单元,以及根据用户定义的类及其定义的彼此之间的关系表达数据库查询的系统。
可以让我们使用类和对象的方式操作数据库,从而从繁琐的 sql语句中解脱出来。
ORM 就是: Obiect Relational Mapper 的简写,就是关系对象映射器的意思。

二、数据库引擎
任何SQLAlchemy应用程序的开始都是一个名为 Engine.此对象充当连接到特定数据库的中心源,提供工厂和称为 connection pool对于这些数据库连接。引擎通常是一个只为特定数据库服务器创建一次的全局对象,并使用一个URL字符串进行配置,该字符串将描述如何连接到数据库主机或后端。

sqlalchemy使用create_engine()函数从URL生成一个数据库引擎对象。例如:
engine=create_engine(r"sqlite:///C:\path\to\foo.db")
1、支持的数据库
URL通常可以包括⽤⼾名、密码、主机名、数据库名以及⽤于其他配置的可选关键字参数。主题格式
为:
1.1、sqlite数据库
sqlite使⽤python内置模块连接到基于⽂件的数据库sqlite3 默认情况下。

1.2、MySQL数据库
mysql⽅⾔使⽤mysql python作为默认dbapi。mysql dbapis有很多,包括pymysql和mysqlclient:

from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:root@localhost:3306/test_db2?charset=utf8')
1.3、数据库引擎的参数
- echo=False–如果为真,引擎将记录所有语句以及repr()其参数列表的默认⽇志处理程序
- future --使⽤2.0样式Engine和Connection API。
- logging_name–将在“sqlalChemy.engine”记录器中⽣成的⽇志记录的“name”字段中使⽤的
字符串标识符。 - pool_size=5 #连接池的⼤⼩默认为5个,设置为0时表⽰连接⽆限制
- pool_recycle=3600,#设置时间以限制数据库⾃动断开
- pool_timeout:连接超时时间,默认为30秒,超过时间的连接都会连接失败。
三、定义模型类
这种模型类结构称为声明性映射,它同时定义了 Python 对象模型,以及描述的数据库元数据 在特定数据库中存在或将要存在的
真实 数据库 表。
映射从一个基类开始,并且是 通心对类的继承来创建一个简单的子类。这里的父类是:Base 模型类。
1、定义模型
# 定义一个模型类的基类
class Base(DeclarativeBase):# 所有的模型类都有的属性和字段映射create_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), comment="创建时间")update_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now(), onupdate=func.now(),comment="更新时间")
import enum
from decimal import Decimalfrom sqlalchemy import String, DECIMAL, Boolean
from sqlalchemy.orm import Mapped, mapped_columnfrom ch04.db_main import Base, engineclass SexValue(enum.Enum):"""通过枚举,可以给一些属性(字段)设置预设值"""MALE = "男"FEMALE = "女"class Employee(Base):"""员工的模型类"""__tablename__ = "t_emp"id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)name: Mapped[str] = mapped_column(String(40), name="emp_name", unique=True, nullable=False) # 不允许为空# DECIMAL:10:总位数,2:小数点后位数sal: Mapped[Decimal] = mapped_column(DECIMAL(10, 2), nullable=True, comment="员工的基本薪资")bonus: Mapped[int] = mapped_column(default=0, comment="员工的津贴")is_leave: Mapped[bool] = mapped_column(Boolean, default=False, comment="员工是否离职,True表示离职,False表示在职")gender: Mapped[SexValue]if __name__ == '__main__':# 数据库迁移# 创建表Base.metadata.create_all(engine)


2、engine负责数据库迁移
# 所有的表都重新创建
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
# 单独把某个表创建⼀下
Employee.__table__.drop(engine)
Employee.__table__.create(engine)
四、alembic数据库迁移⼯具
Alembic使⽤SQLAlchemy作为底层引擎,为关系数据库提供变更脚本的创建、管理和调⽤。
1、安装alembic
pip install alembic
2、初始化alembic环境
命令:alembic init alembic

3、修改配置和环境


4、执⾏命令
# ⾃动⽣成迁移脚本
alembic revision --autogenerate -m "init commit" # 注意修改了orm之后,修改-m后迁移脚
# 数据库迁移命令
alembic upgrade head

查看数据库的版本号与versions中生成的版本号一致

• alembic upgrade head :将数据库升级到最新版本。
• alembic downgrade base :将数据库降级到最初版本。
• alembic upgrade :将数据库升级到指定版本。
• alembic downgrade :将数据库降级到指定版本。
演示版本降级:

相关文章:
SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alemb…...
[含文档+PPT+源码等]精品基于Python实现的django个性化健康餐计划订制系统
软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术:JavaScript、VUE.js(2.X)、css3 开发工具:pycharm、Visual Studio Code、HbuildX 数据库:MySQL 5.7.26&am…...
Python3中异常处理:try/except语句
一. 简介 什么是异常处理 ? 在 Python中,异常处理是一种用于管理程序运行时错误的机制。通过使用异常处理,你可以编写更加健壮和可靠的代码。 Python 提供了 try,except,else和 finally关键字来处理异常,…...
[ Spring] Integrate Spring Boot Dubbo with Nacos 2025
文章目录 Dubbo Project StructureDeclare Plugins and RepositoriesIntroduce DependenciesDubbo Consumer PropertiesDubbo Provider ApplicationDubbo Provider ServiceDubbo Consumer PropertiesDubbo Consumer ApplicationDubbo Consumer ControllerCommand References Du…...
【3分钟极速部署】在本地快速部署deepseek
第一步,找到网站,下载: 首先找到Ollama , 根据自己的电脑下载对应的版本 。 我个人用的是Windows 我就先尝试用Windows版本了 ,文件不是很大,下载也比较的快 第二部就是安装了 : 安装完成后提示…...
【QT笔记】使用QScrollArea实现多行文本样式显示
目录 一、QScrollArea 的基本概念 二、demo代码 三、实现效果 1、页面空间足够,无滚动条时显示效果 2、有滚动条时显示效果 一、QScrollArea 的基本概念 QScrollArea 是 Qt 框架中用于提供一个滚动条区域,允许用户滚动查看比当前可视区域更大的内容…...
大模型中提到的超参数是什么
在大模型中提到的超参数是指在模型训练之前需要手动设置的参数,这些参数决定了模型的训练过程和最终性能。超参数与模型内部通过训练获得的参数(如权重和偏置)不同,它们通常不会通过训练自动学习,而是需要开发者根据任…...
【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址: https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动,会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…...
UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理
UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理? 问题描述: UE成功打包APK并安装过后,启动应用时提示: No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …...
OKHttp拦截器解析
OKHttp涉及到拦截器大概的执行步骤为: 1.通过newCall生成RealCall对象 具体代码如下: Override public Call newCall(Request request) {return new RealCall(this, request, false /* for web socket */);}2.调用Call的execute方法 当然这也可以是执…...
STM32标准库移植RT-Thread nano
STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接:STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码(最好带有点灯和串口)RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生,正在学习阶段&a…...
c++11总结26——std::regex
std::regex 是 C11 引入的 正则表达式库,用于 字符串匹配、搜索和替换。 🔹 头文件:#include <regex> 🔹 命名空间:std 🔹 支持的匹配模式:ECMAScript(默认)、POS…...
langchain教程-12.Agent/工具定义/Agent调用工具/Agentic RAG
前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…...
leetcode_双指针 125.验证回文串
125.验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是回文串 ,返回 true ÿ…...
ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练
文章目录 (文末提供数据集下载)ML.NET库学习001:基于PCA的信用卡异常检查之样本处理与训练目标项目概述代码结构概述1. **主要类和文件**2. **命名空间和使用指令**3. **数据类 (TransactionObservation)**4. **主程序入口 (Main 方法)**5. **数据预处理 (DataPrepr…...
【华为OD机考】华为OD笔试真题解析(1)--AI处理器组合
一、题目描述 某公司研发了一款高性能AI处理器,每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。 编号0~3的处理器处于同一链路中,编号4~7的处理器处于另外一个链路中,不同链路中的处理器不能通信,如…...
edu小程序挖掘严重支付逻辑漏洞
edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号,直接搜索引擎搜索即可得到,这就不用多说了,但是这里的手机号可以任意输入,只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…...
力扣 279. 完全平方数
🔗 https://leetcode.cn/problems/perfect-squares 题目 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量完全平方数可以拆解为两个相同数的乘积 思路 dp 公式,就是从看用哪个完全平方数 1 2 4 9…… 到当前 sum 的数量最少 代码 …...
鸿蒙生态潮起:开发者的逐浪之旅
鸿蒙生态潮起:开发者的逐浪之旅 在全球科技的澎湃浪潮中,鸿蒙生态宛如一座正在崛起的新大陆,熠熠生辉,吸引着无数开发者扬帆起航,探寻其中蕴藏的无限机遇,也直面诸多挑战。 鸿蒙生态的机遇,首先…...
Diskgenius系统迁移之后无法使用USB启动
前言 本文用于记录系统迁移中遇到的问题及解决方法,如有不对请指出,谢谢! 现象 使用DiskGenius进行系统迁移后,使用USB启动失败,反复在品牌logo和黑屏之间切换,期间还会在左上角显示”reset system“报错…...
Qwen2-VL-2B-Instruct实操手册:本地化安全机制与temp_images权限控制说明
Qwen2-VL-2B-Instruct实操手册:本地化安全机制与temp_images权限控制说明 1. 项目核心:理解GME-Qwen2-VL模型 你可能听说过很多能“看图说话”的AI模型,但今天要介绍的 GME-Qwen2-VL-2B-Instruct 有点不一样。它不是一个和你聊天的机器人&a…...
南北阁Nanbeige 4.1-3B企业级应用:软件测试用例的自动化生成与评审
南北阁Nanbeige 4.1-3B企业级应用:软件测试用例的自动化生成与评审 测试工程师老王最近有点烦。新版本下周就要上线,产品经理昨天下午才把最终版的需求文档发过来,而测试用例还一个字没写。他望着密密麻麻的功能点,感觉今晚又得在…...
三步轻松获取国家中小学智慧教育平台电子课本PDF:高效教学资源下载指南
三步轻松获取国家中小学智慧教育平台电子课本PDF:高效教学资源下载指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内…...
【STM32】幻尔16路舵机控制板串口协议解析与实战编程
1. 幻尔16路舵机控制板基础认知 第一次拿到幻尔16路舵机控制板时,我盯着密密麻麻的接口有点发懵。这块巴掌大的绿色电路板,居然能同时控制16个舵机?经过半年多的项目实战,我可以负责任地说:这绝对是多舵机项目的开发神…...
从SRCNN到WDSR:图像超分辨率核心演进路径与关键技术剖析
1. 图像超分辨率技术的基础认知 当你用手机拍下一张照片却发现放大后模糊不清时,图像超分辨率技术就能派上用场。这项技术就像给图像装上"显微镜",能将低分辨率图片转化为清晰的高分辨率版本。不同于简单的插值放大,它通过深度学习…...
R语言新手必看:ggplot2安装失败的5种常见原因及解决方法(附完整代码)
R语言ggplot2安装问题全解析:从报错排查到可视化实战 第一次接触R语言的ggplot2包时,那种兴奋和期待往往会被突如其来的报错信息浇灭。作为R社区最受欢迎的数据可视化工具,ggplot2以其优雅的语法和强大的定制能力吸引了无数用户,但…...
万象视界灵坛实操案例:博物馆数字藏品图像‘青铜器’‘唐三彩’‘水墨画’三级语义识别
万象视界灵坛实操案例:博物馆数字藏品图像青铜器唐三彩水墨画三级语义识别 1. 项目背景与价值 在博物馆数字化进程中,如何准确识别和分类各类文物图像是一个重要课题。传统基于标签的分类系统往往难以捕捉文物深层的艺术风格和文化内涵。 万象视界灵坛…...
STM32环境检测系统设计与物联网应用
1. 项目概述这个基于STM32的环境检测系统是我去年为一个工业客户开发的解决方案,经过3个月的迭代优化已经稳定运行了半年多。系统通过多种传感器实时监测环境参数,并将数据上传至OneNet云平台,实现了本地和远程的双重监控。提示:项…...
手把手教你用llama.cpp在树莓派上跑大模型(附完整配置流程)
在树莓派上部署llama.cpp的完整实践指南 树莓派作为一款价格亲民且功能强大的微型计算机,近年来在边缘计算和嵌入式AI领域崭露头角。本文将详细介绍如何在树莓派上部署llama.cpp这一轻量级大语言模型推理框架,让开发者能够在资源受限的环境中体验前沿AI技…...
从rdt1.0到rdt3.0:可靠数据传输协议的演进与发送接收端FSM解析
1. 可靠数据传输协议的前世今生 第一次接触可靠数据传输协议(Reliable Data Transfer,简称rdt)是在十多年前的一个网络编程项目里。当时为了确保数据能准确无误地传输,我翻遍了各种资料,最终在《计算机网络:…...
