当前位置: 首页 > 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、把端口…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...