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

SQLAlchemy 在 Python 中的同步与异步操作及CRUD实现指南

在 Python 开发中,数据库操作是构建应用不可或缺的一部分。SQLAlchemy 是一个强大的 SQL 工具包和对象关系映射(ORM)库,它提供了丰富的接口来操作数据库,既支持同步操作也支持异步操作。本文将详细介绍如何使用 SQLAlchemy 进行同步和异步数据库操作,并展示如何使用 SQLAlchemy 进行基本的 CRUD(创建、读取、更新、删除)操作。

SQLAlchemy 简介

SQLAlchemy 提供了 SQL 工具和对象关系映射(ORM),能够将数据库表映射为 Python 类,表中的行映射为类实例,列映射为实例属性。这样,开发者就可以使用 Python 代码来操作数据库,而无需编写大量的 SQL 语句。

安装 SQLAlchemy

首先,你需要安装 SQLAlchemy。可以通过 pip 安装:

 

bash复制代码

pip install sqlalchemy

对于异步操作,还需要安装 sqlalchemy[asyncio] 额外包:

 

bash复制代码

pip install sqlalchemy[asyncio]

同步操作

定义模型

在 SQLAlchemy 中,你需要定义一个或多个模型(Model),这些模型对应于数据库中的表。

 

python复制代码

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 创建数据库引擎(以 SQLite 为例)
engine = create_engine('sqlite:///example.db', echo=True)
Base.metadata.create_all(engine)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

CRUD 操作

创建(Create)
 

python复制代码

new_user = User(name='Alice', age=30)
session.add(new_user)
session.commit()
读取(Read)
 

python复制代码

user = session.query(User).filter_by(name='Alice').first()
print(user.name, user.age)
更新(Update)
 

python复制代码

user.age = 31
session.commit()
删除(Delete)
 

python复制代码

session.delete(user)
session.commit()

异步操作

SQLAlchemy 1.4 及以上版本支持异步操作。使用异步时,需要引入 asyncio 和异步的数据库引擎。

异步定义模型

异步模型定义与同步相同,但操作方式不同。

异步 CRUD 操作

首先,创建一个异步的数据库引擎和会话。

 

python复制代码

from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
# 创建异步数据库引擎
async_engine = create_async_engine('sqlite+aiosqlite:///example.db', echo=True)
# 创建异步会话
async_session = AsyncSession(bind=async_engine)
# 注意:以下操作需要在异步函数中执行
async def async_crud():
# 异步创建
async with async_session.begin():
new_user = User(name='Bob', age=25)
await async_session.add(new_user)
# 异步读取
async with async_session.begin():
user = await async_session.execute(select(User).filter_by(name='Bob')).scalars().first()
print(user.name, user.age)
# 异步更新
async with async_session.begin():
user.age = 26
await async_session.commit()
# 异步删除
async with async_session.begin():
await async_session.delete(user)
await async_session.commit()
# 运行异步函数
import asyncio
asyncio.run(async_crud())

结论

通过 SQLAlchemy,无论是同步还是异步操作,都可以非常方便地进行数据库的 CRUD 操作。同步操作适用于传统的阻塞式 I/O 场景,而异步操作则更适合需要高并发处理能力的现代 Web 应用和微服务。在实际开发中,可以根据应用的需求和性能要求来选择合适的操作方式。


http://www.kler.cn/a/280303.html

相关文章:

  • 【面试问题汇总】
  • Spring 源码解读:逐步实现 IoC 容器,深入理解 Spring 核心原理
  • 自动化运维:Ansible、Puppet、Chef工具对比与实战
  • MySQL的安装配置教程
  • 服务器机柜是什么意思?
  • AGI系列(8)零门槛信息抓取利器打造,免费自动化抓取推特上的热点内容
  • C#WinFrom 中实现可自定义按钮和事件的消息提示框
  • [Linux][软件]CentOS 系统部署 RabbitMQ
  • 代码随想录算法训练营第二十五天(回溯 四)
  • 【文心智能体】通过低代码工作流编排创建应用《挑战奥运问答拿奖牌》
  • Leetcode面试经典150题-72.编辑距离
  • 基于Swagger自动生成离线API文档(Word、Markdown文档)
  • 【面试】jvm静态变量和局部变量对比
  • 回车键实现登录
  • Openai API + langchain 分析小型pdf文档
  • Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?
  • 【搜索引擎】ElasticSearch 7.x版本
  • 电单车TCP通讯协议对接phpworkermanHikversion充电桩上位机通讯协议
  • 【开源分享】在线客服系统PHP源码 带搭建教程
  • 【测试】JMeter从入门到进阶