当前位置: 首页 > news >正文

Python实战:SQLAlchemy ORM使用教程

一、SQLAlchemy ORM使用教程

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。在本篇博客中,我们将深入探讨SQLAlchemy ORM的核心知识,并通过具体的代码示例来帮助您快速上手。

二、SQLAlchemy简介

SQLAlchemy由Mike Bayer创建,它提供了两种主要的组件:SQLAlchemy Core和SQLAlchemy ORM。

  • SQLAlchemy Core:是一个SQL表达式语言和数据库抽象层,它允许您使用Python类来表示数据库表,并且可以使用Python表达式来编写SQL查询。
  • SQLAlchemy ORM:是一个建立在SQLAlchemy Core之上的对象关系映射器,它允许您使用Python类来表示数据库表,并且可以通过操作这些类实例来执行数据库操作。
    在本篇博客中,我们将重点介绍SQLAlchemy ORM的使用。

三、安装SQLAlchemy

在开始使用SQLAlchemy之前,需要确保已经安装了Python。SQLAlchemy可以通过pip命令进行安装:

pip install SQLAlchemy

四、连接到数据库

要使用SQLAlchemy ORM,首先需要创建一个数据库连接。SQLAlchemy支持多种数据库后端,包括SQLite、MySQL、PostgreSQL等。
以下是一个使用SQLite数据库的示例:

from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db')

在这个示例中,我们使用create_engine()函数创建了一个SQLite数据库引擎,它将连接到名为example.db的SQLite数据库文件。

五、定义模型

在SQLAlchemy ORM中,模型通常是通过定义Python类来实现的,这些类继承自sqlalchemy.ext.declarative.api.DeclarativeMeta。每个类对应于数据库中的一个表,类的属性对应于表中的列。
以下是一个简单的用户模型示例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)

在这个示例中,我们首先创建了一个Base类,它将作为所有模型类的基类。然后,我们定义了一个User类,它继承自Base类。__tablename__属性指定了数据库中对应的表名。idnameage属性定义了表中的列,Column函数用于指定列的数据类型和约束。

六、创建表

在定义了模型之后,我们可以使用Base.metadata.create_all()方法来创建数据库表。

from sqlalchemy.orm import sessionmaker
# 创建数据库连接
engine = create_engine('sqlite:///example.db')
# 创建所有表
Base.metadata.create_all(engine)

在这个示例中,我们首先创建了一个数据库连接。然后,我们调用了Base.metadata.create_all()方法,它将根据模型定义创建所有表。

七、创建会话

在SQLAlchemy ORM中,会话(Session)是用于与数据库进行交互的主要接口。会话允许您执行数据库操作,如插入、查询、更新和删除数据。
以下是一个创建会话的示例:

from sqlalchemy.orm import sessionmaker
# 创建数据库连接
engine = create_engine('sqlite:///example.db')
# 创建会话工厂
Session = sessionmaker(bind=engine)
# 创建会话实例
session = Session()

在这个示例中,我们首先创建了一个数据库连接。然后,我们使用sessionmaker函数创建了一个会话工厂。最后,我们创建了一个会话实例,它将用于执行数据库操作。

八、插入数据

在SQLAlchemy ORM中,要插入数据,首先需要创建模型类的实例,并将其添加到会话中。然后,可以使用会话的commit()方法将更改提交到数据库。
以下是一个插入数据的示例:

# 创建用户实例
user = User(name='Alice', age=30)
# 添加用户到会话
session.add(user)
# 提交事务
session.commit()

在这个示例中,我们首先创建了一个User实例,并设置了nameage属性。然后,我们使用add()方法将用户实例添加到会话中。最后,我们调用了commit()方法将更改提交到数据库。

九、查询数据

在SQLAlchemy ORM中,要查询数据,可以使用会话的query()方法。query()方法接受模型类作为参数,并返回一个查询对象。查询对象提供了多种方法来执行不同的查询操作。
以下是一些查询数据的示例:

# 查询所有用户
users = session.query(User).all()
# 查询特定条件的用户
user = session.query(User).filter_by(name='Alice').first()
# 查询并排序
users = session.query(User).order_by(User.age.desc
()).all()
# 查询并限制返回数量
users = session.query(User).limit(5).all()
# 查询并偏移
users = session.query(User).offset(5).limit(5).all()
# 查询并使用原生SQL
users = session.query(User).filter("age > 25").all()

在这个示例中,我们展示了如何执行不同的查询操作。all()方法返回查询结果的所有记录,first()方法返回查询结果的第一条记录。filter_by()方法用于根据特定条件过滤记录,order_by()方法用于排序记录,limit()方法用于限制返回的记录数量,offset()方法用于偏移查询结果的起始点。此外,还可以使用filter()方法配合原生SQL语句进行查询。

十、更新数据

在SQLAlchemy ORM中,要更新数据,可以使用会话的query()方法获取要更新的记录,然后修改记录的属性,并提交会话。
以下是一个更新数据的示例:

# 查询要更新的用户
user = session.query(User).filter_by(name='Alice').first()
# 更新用户属性
user.age = 31
# 提交事务
session.commit()

在这个示例中,我们首先查询了名为Alice的用户。然后,我们修改了用户的age属性。最后,我们提交了会话以保存更改。

十一、删除数据

在SQLAlchemy ORM中,要删除数据,可以使用会话的query()方法获取要删除的记录,然后使用delete()方法删除记录,并提交会话。
以下是一个删除数据的示例:

# 查询要删除的用户
user = session.query(User).filter_by(name='Alice').first()
# 删除用户
session.delete(user)
# 提交事务
session.commit()

在这个示例中,我们首先查询了名为Alice的用户。然后,我们使用delete()方法删除了该用户。最后,我们提交了会话以保存更改。

十二、使用事务

在SQLAlchemy ORM中,可以使用会话来管理事务。会话提供了一个begin()方法来开始一个事务,以及一个commit()方法来提交事务。如果发生错误,可以使用rollback()方法来回滚事务。
以下是一个使用事务的示例:

# 开始事务
session.begin()
try:# 执行数据库操作user = User(name='Bob', age=25)session.add(user)session.commit()
except:# 回滚事务session.rollback()raise

在这个示例中,我们首先调用了begin()方法开始一个事务。然后,我们尝试执行数据库操作,如果操作成功,我们提交事务。如果发生错误,我们回滚事务并重新抛出异常。

十三、关闭会话

在完成数据库操作后,应该关闭会话以释放资源。

# 关闭会话
session.close()

十四、结论

SQLAlchemy ORM是一个功能强大且灵活的工具,它允许我们使用Python类和实例来表示数据库表和记录。在本篇博客中,我们介绍了如何连接到数据库、定义模型、创建表、插入、查询、更新和删除数据、使用事务以及关闭会话。这些知识将帮助我们在Python应用程序中高效地使用SQLAlchemy ORM。

相关文章:

Python实战:SQLAlchemy ORM使用教程

一、SQLAlchemy ORM使用教程 SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。在本篇博客中,我们将深入探讨SQLAlchemy ORM的核心知识,并…...

能不能绕过c去学c++?

目前做工程开发,基本都是c/c混着用的,c/c是同源的,c/是在c的基础上发展起来的,它们之间有些联系和区别: 区别: 1.可用库不同 c基本是系统底层语言,一般系统底层开发用c(例如&…...

Python 小爬虫:爬取 bing 每日壁纸设为桌面壁纸

请求 URLJSON 版示例代码代码片段注意点headers 中的 User-Agent响应头中的 Content-Type终端通过代理API从 bing.com 找Bing 每日壁纸设置为桌面壁纸代码设定计划任务自动执行 python 脚本请求 URL 通过模仿必应(Bing)自己的 AJAX 调用方式获得请求 URL。 JSON 格式:...

利用textarea和white-space实现最简单的文章编辑器 支持缩进和换行

当你遇到一个非常基础的文章发布和展示的需求,只需要保留换行和空格缩进,你是否会犹豫要使用富文本编辑器?实际上这个用原生的标签两步就能搞定! 1.直接用textarea当编辑器 textarea本身就可以保存空格和换行符,示例如…...

总结mac下解决matplotlib中文显示问题的几种方法

一、前言: 使⽤matplotlib画图时,由于matplotlib默认没有中⽂,显⽰中文时会出现空⽩⼩⽅块。 二、方法: 2.1 matplotlib中使用SimHei字体 1)进入终端后查看matplotlib的字体路径: $ python >>&g…...

探索区块链世界:从加密货币到去中心化应用

相信提到区块链,很多人会想到比特币这样的加密货币,但实际上,区块链技术远不止于此,它正在深刻地改变我们的生活和商业。 首先,让我们来简单了解一下什么是区块链。区块链是一种分布式数据库技术,它通过将…...

GitLab/Github从头开始配置秘钥

1、下载git安装包 CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 拉到页面最底部选择 点进文件夹下载32位或者64位的版本,我的是64位就选择64的版本进行安装 2、傻瓜式安装 3、在相应的文件夹右键选择 UserName为你的用…...

uni.getlocation h5获取定位失败后,阻塞问题

uni.getlocation 在H5中,如果用户未开gps定位或者gps定位信号较差时,定位会失败。这种情况uni.getlocation也不会出现报错,也不会有后续执行,导致代码阻塞,体验极差。 解决方案1:拿不到定位或者定位失败这个…...

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令,会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载,如果没有配置国内镜像,可能会由于其服务器在国外导致资源下载慢或者下载不下来,所以出现了运行 flutter doctor 命令…...

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…...

【iOS】——Blocks

文章目录 前言一、Blocks概要1.什么是Blocks 二、Block模式1.block语法2.block类型变量3.截获自动变量值4._Block修饰符5.截获的自动变量 三、Blocks的实现1.Block的实质2.截获自动变量值3._Block说明符4.Block存储域 前言 一、Blocks概要 1.什么是Blocks Blocks是C语言的扩…...

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具&#xff0c;在 obd V2.5.0 版本之前&#xff0c;其主要功能主要是部署各类组件&#xff0c;例如 oceanbase-ce,obproxy-ce,obagent 等。然而&#xff0c;它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说&#xff1a; 1、若…...

关于前端的学习

目录 前言: 1.初识HTML: 1.1超文本: 1.2标记语言: 2.关于html的基本框架: 3.HTML基本文字标签: 3.1.h标题标签: 3.3 文本内容: 3.4换行的和分割的: 3.5 特殊文字标签: 3.5.1表面上看着三对的结果呈现都是一样的: 3.5.2但是其背后的效果其实是不一样的: 3.6转义字符:…...

DataX脚本告别手动编写,用大模型或Java代码自动生成

在离线数仓开发中,DataX支持多种数据源,性能好抽取速度快。美中不足的是,对需要抽取的每一张表都需要写配置文件,这样很繁琐和耗时。可以用大模型提示词来节省这方面的工作量。ChatGPT等大模型并不能很智能提供一个完全正确的,需要提供一个模板让它参考。 方法1:用大模型…...

ASP.NET通过Appliaction和Session统计在人数和历史访问量

目录 背景: Appliaction&#xff1a; Session&#xff1a; 过程&#xff1a; 数据库&#xff1a; Application_Start&#xff1a; Session_Start&#xff1a; Session_End&#xff1a; Application_End&#xff1a; 背景: 事件何时激发Application_Start在调用当前应用…...

在基于全志V851se的TinyVision上手动构建 Linux 6.1 + Debian 12 镜像

构建 SyterKit 作为 Bootloader SyterKit 是一个纯裸机框架&#xff0c;用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板&#xff0c;SyterKit 使用 CMake 作为构建系统构建&#xff0c;支持多种应用与多种外设驱动。同时 SyterKit 也具有启动引导的功能&a…...

使用jenkins-pipeline进行利用项目文件自动化部署到k8s上

Discard old builds:丢弃旧的构建,目的是管理存储空间、提升性能以及保持环境整洁 Do not allow concurrent builds: 禁止并发构建是指同一时间内只允许一个构建任务执行,避免多个构建同时运行可能带来的问题 Do not allow the pipeline to resume if the controller resta…...

unity发布安卓获取读取权限

一、Player Settings 设置 Player Settings>Player>Other Settings> Android > Write Permission > External (SDCard). 二、代码 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Andr…...

VSCode下使用github初步

由于各种需要&#xff0c;现在需要统一将一些代码提交搞github&#xff0c;于是有了在VSCode下使用github的需求。之前只是简单的使用git clone&#xff0c;代码提交这些用的是其他源代码工具&#xff0c;于是得学习实操下&#xff0c;并做一记录以备后用。 安装 VSCode安装 …...

华为设备配置命令大全

目录 一、华为设备常用命令视图 二、返回命令和保存命令 三、设置设备名称 四、关闭泛洪信息 五、设置设备接口的IP地址和子网掩码 六、交换机的登录 6.1、设置Consile接口密码 6.2、设置Telent接口密码 七、VLAN配置 7.1、创建VLAN 7.2、进入vlan视图 7.3、把端口…...

医学图像分类实战:基于kvasir v2胃病数据集的深度卷积网络性能对比

1. 医学图像分类与KVASIR V2数据集简介 胃镜图像分类是计算机辅助诊断系统中的关键环节。KVASIR V2作为目前最全面的公开胃病数据集&#xff0c;包含8类常见胃部病变的8000张高清图像&#xff0c;每类1000张。这些图像由专业胃肠病专家标注&#xff0c;覆盖了从正常黏膜到早期…...

如何让微信聊天记录真正属于你:完整备份与分析终极指南

如何让微信聊天记录真正属于你&#xff1a;完整备份与分析终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCh…...

开发提效新组合:用Cursor生成代码片段,在快马一键集成与部署

最近在做一个数据整理的小工具时&#xff0c;发现了一个特别高效的工作流组合&#xff1a;先用Cursor快速生成核心代码片段&#xff0c;再用InsCode(快马)平台一键整合部署。整个过程就像搭积木一样顺畅&#xff0c;特别适合需要快速实现功能模块的场景。 需求分析 我们经常要处…...

COMSOL激光与电火花高斯热源作用下5.6版本两相流水平集仿真模型:流体传热-层流耦合研究

comsol激光、电火花&#xff08;高斯热源&#xff09;加工的水平集两相流仿真模型&#xff0c;5.6版本的&#xff0c;是流体传热—层流—两相流水平集耦合。在COMSOL Multiphysics 5.6中&#xff0c;模拟激光或电火花加工过程中的热源分布和流体行为&#xff0c;是一个相当有趣…...

SEER‘S EYE模型辅助计算机组成原理教学:概念可视化与问答

SEERS EYE模型辅助计算机组成原理教学&#xff1a;概念可视化与问答 计算机组成原理这门课&#xff0c;对很多学生来说&#xff0c;就像在学一门“外星语”。CPU、寄存器、流水线、缓存……这些词听起来就够抽象的&#xff0c;更别说理解它们是怎么协同工作的了。传统的教学方…...

Onekey:突破Steam清单管理瓶颈的全场景开源解决方案

Onekey&#xff1a;突破Steam清单管理瓶颈的全场景开源解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在数字游戏产业蓬勃发展的今天&#xff0c;Steam平台已成为全球最大的综合性数字…...

实战构建开放数据可视化平台,从采集到展示的全流程开发指南

今天想和大家分享一个完整的开放数据可视化项目实战经验。这个项目从数据采集到最终展示&#xff0c;涵盖了全流程开发的关键环节&#xff0c;特别适合想积累真实项目经验的朋友参考。 项目背景与目标 开放数据正在成为数字化转型的重要资源&#xff0c;但很多开发者面对海量…...

Stable Diffusion像素艺术工作站:Pixel Fashion Atelier支持LoRA在线热切换

Stable Diffusion像素艺术工作站&#xff1a;Pixel Fashion Atelier支持LoRA在线热切换 1. 像素时装锻造坊简介 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站&#xff0c;专为像素艺术创作而设计。与传统AI工具不同&#xff0c;它采用了复…...

nli-distilroberta-base生产环境:金融风控中合同条款中立性识别实践

nli-distilroberta-base生产环境&#xff1a;金融风控中合同条款中立性识别实践 1. 项目背景与价值 在金融风控领域&#xff0c;合同条款的准确理解至关重要。传统人工审核方式效率低下且容易遗漏关键细节&#xff0c;而自然语言理解技术可以大幅提升审核效率和准确性。nli-d…...

3MF格式与Blender从入门到精通:重塑3D打印工作流

3MF格式与Blender从入门到精通&#xff1a;重塑3D打印工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 概念解析&#xff1a;为什么3MF正在取代STL成为行业新标准 …...