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

news2025/2/7 6:21:36

在这里插入图片描述


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_engine

engine = create_engine('mysql+pymysql://root:root@localhost:3306/test_db2?charset=utf8')

1.3、数据库引擎的参数

  1. echo=False–如果为真,引擎将记录所有语句以及repr()其参数列表的默认⽇志处理程序
  2. future --使⽤2.0样式Engine和Connection API。
  3. logging_name–将在“sqlalChemy.engine”记录器中⽣成的⽇志记录的“name”字段中使⽤的
    字符串标识符。
  4. pool_size=5 #连接池的⼤⼩默认为5个,设置为0时表⽰连接⽆限制
  5. pool_recycle=3600,#设置时间以限制数据库⾃动断开
  6. 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 Decimal

from sqlalchemy import String, DECIMAL, Boolean
from sqlalchemy.orm import Mapped, mapped_column

from ch04.db_main import Base, engine


class 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 :将数据库降级到指定版本。

演示版本降级:
在这里插入图片描述

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

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

相关文章

C# OpenCV机器视觉:图像风格迁移

在一个充满奇思妙想的创意工作室里,小李正像只热锅上的蚂蚁,为客户的项目挠破了脑袋,急需寻找灵感的火花。他望着眼前那幅平淡无奇的风景图像,心想:“这玩意儿也太普通啦,就像一杯白开水,怎么能…

语言月赛 202311【基因】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后,得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说,对…

Spring @PropertySource:让你的应用配置更加模块化和可维护

PropertySource注解在Spring中的作用,就像是给Spring应用配了一个“外部配置箱”。 想象一下,你在开发一个Spring应用时,有很多配置信息需要设置,比如数据库的连接信息、应用的某些功能开关等。如果这些信息都硬编码在代码中&…

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…

快速搭建GPU环境 | docker、k8s中使用gpu

目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件: GPU DriverCUDA Toolkit 二者的关…

npm中央仓库

1、官网地址 npm | Home 2、搜索依赖包

2025年软考考试时间及考试科目如何安排?附考试注意事项!

一、考试时间 2025年软考举行两次考试,分别安排在上半年和下半年。根据最新公布的信息,2025年软考考试的具体时间安排如下: 上半年考试时间:5月24日至5月27日 下半年考试时间:11月8日至11月11日 考生需要在规定的时间内…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿,命名为“PPT.pptx”(“.pptx”为扩展名)新建幻灯片 开始→版式“PPT_素材.doc…

HTML排版标签、语义化标签、块级和行内元素详解

目录 前言 一、HTML中的排版标签 1. 文本相关标签 1.1 标题标签 ~ 1.2 段落标签 1.3 强调和加粗 1.4 换行标签 1.5 水平线标签 二、HTML中的语义化标签 2.1 语义化标签概述 2.2 常见的语义化标签 示例(核心代码部分): 三、HTM…

机器学习中的关键概念:通过SKlearn的MNIST实验深入理解

欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 sklearn相关介绍 Scikit-learn 是一个广泛使用的开源机器学习库,提供了简单而高效的数据挖掘和数据分析工具。它建立在 NumPy、SciPy 和 matplotlib 等科学计算库之上,支持…

用NeuralProphet预测股价:AI金融新利器(附源码)

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:我用NeuralProphet模型预测了股票价格,发现其通过结合时间序列分析和神经网络算法,确实能提供比传统Last Value方法更精准的预测。经过一系列超参数调优…

深度学习-103-RAG技术之通过分块技术提升RAG的效果

文章目录 1 RAG中的分块技术1.1 RAG是什么1.2 分块chunking是什么1.3 分块的重要性1.4 分块的技巧2 固定字符大小分块2.1 固定字符大小分块的优缺点2.2 自定义分块代码2.3 LangChain的CharacterTextSplitter3 递归字符文本分割3.1 递归字符文本分割的优缺点3.2 LangChain的Recu…

【B站保姆级视频教程:Jetson配置YOLOv11环境(六)PyTorchTorchvision安装】

Jetson配置YOLOv11环境(6)PyTorch&Torchvision安装 文章目录 1. 安装PyTorch1.1安装依赖项1.2 下载torch wheel 安装包1.3 安装 2. 安装torchvisiion2.1 安装依赖2.2 编译安装torchvision2.2.1 Torchvisiion版本选择2.2.2 下载torchvisiion到Downloa…

Java进阶14 TCP日志枚举

Java进阶14 TCP&日志&枚举 一、网络编程TCP Java对基于TCP协议得网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。 1、TCP协议发数据 1.1 构造方法 方法 说明 Socket(InetAddress address…

[LVGL] 在VC_MFC中移植LVGL

前言: 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgllvgl: LVGL 是一个开源图形库,提供您创建具有易于使用的图形元素、漂亮的…

Crewai框架配置回调函数

官方文档里只指提了一句 不过不太难,在crew.py文件里配置一下就行了,下面是一个demo,这个函数会在research_task任务执行完触发(配置LLM这里请看我这篇博客) from crewai import Crew, Process, Agent, Taskfrom src.…

拧紧“安全阀”,AORO-P300 Ultra防爆平板畅通新型工业化通信“大动脉”

在油气管道泄漏的浓烟中,在矿道坍塌的密闭空间里,在洪水肆虐的救援现场,传统通讯设备频频失效的困境已成为历史。AORO-P300 Ultra防爆平板集5G通讯、红外感知、应急照明等实用功能于一体,以军工级防护与全场景智能应用&#xff0c…

基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper

KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…

CAD导入与解析,助力工业数据可视化高效呈现

背景 在企业的日常设计与管理中,CAD图纸早已成为不可或缺的重要资产,多年来知识积累的载体,凝聚了大量的心血与智慧。然而,CAD图纸往往只作为静态文件保存,应用场景较为有限。在数字经济时代,如何让CAD图纸…

基于docker部署kafka-3.8.0版本,并开启SASL认证模式

1、下载安装包 (1)https://kafka.apache.org/downloads 下载如下图版本 2、解压安装包 执行tar -xvf kafka_2.13-3.8.0.tgz命令对安装包进行解压。 3、增加配置文件 (1)进入 /kafka_2.13-3.8.0/config 目录 (2&a…