SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

news2024/11/24 11:09:02

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法,并通过代码示例和案例分析,帮助新手朋友快速上手。
在这里插入图片描述

一、SQLAlchemy简介

SQLAlchemy由Mike Bayer创建,它提供了两种主要的组件:SQLAlchemy Core和SQLAlchemy ORM。SQLAlchemy Core是一个SQL表达式语言和数据库抽象层,而SQLAlchemy ORM则是一个建立在Core之上的对象关系映射器。

二、安装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 属性定义了表中的列。

五、创建表

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

Base.metadata.create_all(engine)

六、创建会话

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

以下是一个创建会话的示例:

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()

七、插入数据

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

以下是一个插入数据的示例:

user = User(name='Alice', age=30)
session.add(user)
session.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()

九、更新数据

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

以下是一个更新数据的示例:

user = session.query(User).filter_by(name='Alice').first()
user.age = 31
session.commit()

十、删除数据

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

以下是一个删除数据的示例:

user = session.query(User).filter_by(name='Alice').first()
session.delete(user)
session.commit()

十一、使用事务

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

以下是一个使用事务的示例:

session.begin()
try:
    user = User(name='Bob', age=25)
    session.add(user)
    session.commit()
except:
    session.rollback()
    raise

十二、关闭会话

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

session.close()

十三、结论

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

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

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

相关文章

C++ | Leetcode C++题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution { private:mt19937 gen{random_device{}()};uniform_real_distribution<double> dis;double xc, yc, r;public:Solution(double radius, double x_center, double y_center): dis(0, 1), xc(x_center), yc(y_center),…

Web前端高级工程师培训:异步处理专题

异步处理专题 课前准备 工具 编辑器 VSCode浏览器 Chorme 前置知识 ES6基础语法 课堂主题 同步及异步概念方块运动的实现promise的用法then的返还值Async 函数 和 await 课堂目标 理解并学会使用promise使用方式以及async 、await的使用 同步异步概念 js是单线程 单线程…

动态规划-多状态问题——LCR.090.打家劫舍

1.题目解析 题目来源&#xff1a;LCR.090.打家劫舍——力扣 测试用例 2.算法原理 1.状态表示 每一个房子都有两个状态&#xff1a;被偷与不被偷&#xff0c;因此需要两个dp表f/g来表示被偷与不被偷&#xff0c;其中f[i]/g[i]表示小偷走到第i个位置的最大偷钱数 2.状态转移方程…

【开源物联网平台】Fastbee系统稳定性和压测报告

目录 一、机器准备 二、压测步骤 2.1 去除认证&#xff0c;修改clientid识别问题 2.2 添加重发布脚本 三、压测结果 四、压测工具使用 一、机器准备 准备两台服务器&#xff0c;一台为部署fastbee服务端应用&#xff0c;另一台为客户端压力机。其中&#xff1a; fastbee…

TensorRT-LLM七日谈 Day3

今天主要是结合理论进一步熟悉TensorRT-LLM的内容 从下面的分享可以看出&#xff0c;TensorRT-LLM是在TensorRT的基础上进行了进一步封装&#xff0c;提供拼batch&#xff0c;量化等推理加速实现方式。 下面的图片更好的展示了TensorRT-LLM的流程&#xff0c;包含权重转换&…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态&#xff0c;因此需要多个dp表表示不同状态对应位置的值&#xff0c;然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源&#xff1a;面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

红米AC2100路由器原官方固件关闭IPv6防火墙

红米AC2100路由器原官方固件关闭IPv6防火墙 问题背景 我家里宽带开通了IPv6&#xff0c;并且获得了公网的IPv6地址。在同一Wi-Fi内部&#xff0c;可以使用公网IPv6正常访问。 但是&#xff0c;当我切换为手机流量&#xff0c;也就是公网环境&#xff0c;访问就失败了。 问题…

苹果最新论文:LLM只是复杂的模式匹配 而不是真正的逻辑推理

大语言模型真的可以推理吗&#xff1f;LLM 都是“参数匹配大师”&#xff1f;苹果研究员质疑 LLM 推理能力&#xff0c;称其“不堪一击”&#xff01;苹果的研究员 Mehrdad Farajtabar 等人最近发表了一篇论文&#xff0c;对大型语言模型 &#xff08;LLM&#xff09; 的推理能…

<<迷雾>> 第11章 全自动加法计算机(5)--顺序取数 示例电路

顺序地从存储器里取数的电路方案. info::操作说明 在开始之前, 地址计数器 AC 需要清零, 以指向地址 0000. 按一下开关 KAR, 将 AC 当前的地址锁存到 AR 地址寄存器. 按住 KRD, 不要松开(注: 系统中使用的是普通开关, 无需按住), 再按一下 KDR, 数据保存到寄存器 DR 中, 最后,…

Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】

文章目录 Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】1. 引入mapstruct依赖2. 数据准备2-1 准备一个子类&#xff0c;TestData2-2 准备两个类&#xff0c;SourceData&#xff0c;TargetData&#xff0c;属性完全一样 3. 定义Mapper接口【注&#xff1a;这里的Mapper是…

AIGC毕设项目分享:基于RAG的数字人对话系统及其应用

本研究的主要目标是设计并实现一个基于检索增强生成&#xff08;RAG&#xff09;技术的数字人对话系统&#xff0c;旨在提升数字人系统在多轮对话中的上下文管理、情境感知能力以及动态内容生成效果。系统结合了深度学习中的最新大语言模型技术&#xff0c;通过引入RAG框架来增…

概率论基础01_事件概率

目录 一、事件 1、概率 1.1基本事件 1.3必然事件 1.4不可能事件 1.5样本空间 1.6样本点 2、事件间的关系 2.1包含关系 2.2并集 2.3交集 2.4差集 2.5互斥事件 2.6对立事件 2.7完备事件组 3、运算律 3.1交换律 3.2结合律 3.3分配律 3.4对偶律 二、概率 1、…

10.MySql全局参数优化

从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间。 一、全局参数 配置文件my.ini(windows)或my.cnf(mac)的全局参数&#xff1a; 假设服务器配置为&#xff1a; CPU&#xff1a;32核 内存&#xff1a;64G…

2025推荐选题|基于MVC的农业病虫害防治平台的设计与实现

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

机器视觉AI场景为什么用Python比C++多?

好多开发者在讨论机在机器视觉人工智能领域的时候&#xff0c;纠结到底是用Python还是C&#xff0c;实际上&#xff0c;Python 和 C 都有广泛的应用&#xff0c;选择 Python而不是 C 可能有以下一些原因&#xff1a; 语言易学性和开发效率 语法简洁&#xff1a; Python 语法简…

【部署篇】Redis-01介绍‌

一、Redis介绍‌ 1、什么是Redis&#xff1f; ‌Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;Redis是一个开源的、使用‌ANSI C语言编写的‌Key-Value存储系统&#xff0c;支持网络、可基于内存亦可持久化。‌ 它提…

Android Compose 控件基本属性

本文的代码由上一篇文章的Demo进一步书写完成, 传送门:Android Compose的基本使用-CSDN博客 _____________________________________________________________________________ 以下代码分别列举了控件的: 内边距,外边距,内容居中,渐变自定义边框,宽度权重,string资源引用等…

走进面向对象编程的奇妙世界

在当今的编程领域&#xff0c;面向对象编程&#xff08;Object - Oriented Programming&#xff0c;简称 OOP&#xff09;犹如一颗璀璨的明星&#xff0c;照亮了软件开发的道路。 面向对象编程是一种基于对象概念的编程范式。那么&#xff0c;什么是对象呢&#xff1f;对象可以…

Windows系统C盘爆满了,如何清理?

Windows系统C盘爆满了&#xff0c;如何清理&#xff1f; 大家好&#xff0c;我是秋意零。 相信使用过Windows系统的朋友&#xff0c;都见过C盘那道靓丽的 “红色风景线” &#xff01; 我自己的Win10系统&#xff0c;已经使用了4-5年时间了。最近频频出现"红色风景线&q…

免费送源码:Java+Springboot+MySQL 水环境检测系统的设计与实现 计算机毕业设计原创定制

摘 要 在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质监测系统。近几年,无线传感器…