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“报错…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...