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__属性指定了数据库中对应的表名。id、name和age属性定义了表中的列,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实例,并设置了name和age属性。然后,我们使用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:数据管理2 一:上机实验2 # 编写函数stat,要求该函数同时计算均值,最大值,最小值,标准差,峰度和偏度。 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的命令行部署工具,在 obd V2.5.0 版本之前,其主要功能主要是部署各类组件,例如 oceanbase-ce,obproxy-ce,obagent 等。然而,它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说: 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: Session: 过程: 数据库: Application_Start: Session_Start: Session_End: Application_End: 背景: 事件何时激发Application_Start在调用当前应用…...
在基于全志V851se的TinyVision上手动构建 Linux 6.1 + Debian 12 镜像
构建 SyterKit 作为 Bootloader SyterKit 是一个纯裸机框架,用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板,SyterKit 使用 CMake 作为构建系统构建,支持多种应用与多种外设驱动。同时 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初步
由于各种需要,现在需要统一将一些代码提交搞github,于是有了在VSCode下使用github的需求。之前只是简单的使用git clone,代码提交这些用的是其他源代码工具,于是得学习实操下,并做一记录以备后用。 安装 VSCode安装 …...
华为设备配置命令大全
目录 一、华为设备常用命令视图 二、返回命令和保存命令 三、设置设备名称 四、关闭泛洪信息 五、设置设备接口的IP地址和子网掩码 六、交换机的登录 6.1、设置Consile接口密码 6.2、设置Telent接口密码 七、VLAN配置 7.1、创建VLAN 7.2、进入vlan视图 7.3、把端口…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
