python-mysql协程并发常用操作封装

目录

  • 前言
  • 封装代码
  • 测试代码
  • 参考


前言

协程异步操作MYSQL是常用的,博主这里在GitHub上找了两个包,databases和aiomysql,第一个包除了mysql外还支持其他的数据库,且操作MYSQL时底层也是使用的aiomysql,但文档内容比较少,所以选择了对aiomysql进行封装。使用

pip3 install aiomysql

安装即可。

封装代码

async_mysql.py

# coding:utf-8
import aiomysql
import tracebackclass AsyncMySQLClient:def __init__(self, host: str, user: str, password: str, db: str, port: int = 3306, loop=None):self.host = hostself.port = portself.user = userself.password = passwordself.db = dbself.loop = loopself.pool = None# 创建连接池async def connect(self):try:self.pool = await aiomysql.create_pool(host=self.host,port=self.port,user=self.user,password=self.password,db=self.db,loop=self.loop,autocommit=True)except:print(f"connect error:{traceback.format_exc()}")# 关闭连接池async def close(self):self.pool.close()await self.pool.wait_closed()# 执行一条非查询类语句async def execute(self, query:str, args:tuple=None) -> int:async with self.pool.acquire() as conn:async with conn.cursor() as cur:await cur.execute(query, args)return cur.rowcount# 批量执行非查询类语句async def executemany(self, query:str, args:list=None) -> int:async with self.pool.acquire() as conn:async with conn.cursor() as cur:await cur.executemany(query, args)return cur.rowcount# 查询单条数据async def fetchone(self, query:str, args:tuple=None) -> dict:async with self.pool.acquire() as conn:async with conn.cursor(aiomysql.DictCursor) as cur:await cur.execute(query, args)return await cur.fetchone()# 查询多条数据async def fetchall(self, query:str, args=None) -> list:async with self.pool.acquire() as conn:async with conn.cursor(aiomysql.DictCursor) as cur:await cur.execute(query, args)return await cur.fetchall()# 封装单条插入async def insert(self, table: str, data: dict) -> int:""":param table: 表名:param data: 数据:return:"""keys = ','.join(data.keys())values = ','.join(['%s'] * len(data))query = f'INSERT INTO {table} ({keys}) VALUES ({values})'try:return await self.execute(query, tuple(data.values()))except:print(f"execute {query} with {data} failed, error{traceback.format_exc()}")return 0# 封装批量插入async def insert_many(self, table:str, data_list:list)->int:""":param table: 表名:param data_list: 数据列表:return:"""keys = ','.join(data_list[0].keys())values = ','.join(['%s'] * len(data_list[0]))query = f'INSERT INTO {table} ({keys}) VALUES ({values})'args = [tuple(data.values()) for data in data_list]try:return await self.executemany(query, args)except:print(f"execute {query} with {args} failed, error{traceback.format_exc()}")return 0

非查询类的返回影响行数,查询类的返回数据,使用字典(或字典为元素的列表)。对于常用的插入和查询进行了封装,其他的使用execute函数即可。
使用时生成类的对象,之后connect,执行语句后close即可。

测试代码

import asyncio
import uuid
from async_mysql import AsyncMySQLClientasync def main():cli =  AsyncMySQLClient(host="127.0.0.1",user="root",password="12345678",db="test")await cli.connect()nums = await cli.insert(table="users",data={"id": uuid.uuid4(),"name": "lady_killer9"})print(f"插入{nums}条数据")random_id = uuid.uuid4()nums = await cli.insert_many(table="users",data_list=[{"id": random_id,"name": "lady_killer9"}])print(f"插入{nums}条数据")user = await cli.fetchone(query="select * from users where id = %s",args=(random_id,))print(f"查询到用户:{user}")users = await cli.fetchall(query="select * from users where name = 'lady_killer9'")print(f"所有用户:{users}")num = await cli.execute(query="update users set name='lady_killer8' where id = %s",args=(random_id,))if num == 1:print("修改成功")nums = await cli.execute(query="delete from users")print(f"删除{nums}条数据")await cli.close()if __name__ == '__main__':asyncio.run(main())

截图如下:
在这里插入图片描述

参考

databases
aiomysql

更多python相关内容,参考:【python总结】python学习框架梳理

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

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

相关文章

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路,才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

深入探究Python多进程编程:Multiprocessing模块基础与实战【第98篇—Multiprocessing模块】

深入探究Python多进程编程:Multiprocessing模块基础与实战 在Python编程中,多进程处理是一项关键的技术,特别是在需要处理大规模数据或执行耗时任务时。为了充分利用多核处理器的优势,Python提供了multiprocessing模块&#xff0…

Ubuntu20.04和Windows11下配置StarCraft II环境

1.Ubuntu20.04 根据下面这篇博客就可以顺利安装: 强化学习实战(九) Linux下配置星际争霸Ⅱ环境https://blog.csdn.net/weixin_39059031/article/details/117247635?spm1001.2014.3001.5506 Ubuntu下显示游戏界面目前还没有解决掉。 大家可以根据以下链接看看能…

高速DRAM的training

随着每一代接口(Interface)和存储(memory)的频率和速率的提高,信号采样以及传输变得越来越困难,因为数据眼(data eyes)越来越小。 为了帮助高速 I/O 握手,接口和存储支持越来越多的Training Modes,系统设计人员必须将这些Trainin…

联想开天昭阳N4620Z笔记本如何恢复出厂麒麟操作系统(图解)

联想开天昭阳N4620Z笔记本简单参数: 中央处理器:KX-6640MA G2 内存:8GB 固态硬盘:512GB SSD 显示器:14.0”FHD 电池:4Cell 操作系统:麒麟KOS中文RTM(试用版) 此款笔…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…

​Sqli-labs靶场第9关详解[Sqli-labs-less-9]

Sqli-labs-Less-9 前言: SQL注入的三个条件: ①参数可控;(从参数输入就知道参数可控) ②参数过滤不彻底导致恶意代码被执行;(需要在测试过程中判断) ③参数带入数据库执行。&#…

Linux---进程间通信(下)

1、System V 共享内存 原理如下图 系统调用接口介绍 int shmget(key_t key, size_t size, int shmflg) 功能:用来创建共享内存 参数 key:这个共享内存段名字,内核用key来标识共享内存size:共享内存大小shmflg:由九个权…

AMRT3D数字孪生引擎详解

AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础,以降本增效为目标,支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…

矩阵的导数运算(理解分子布局、分母布局)

矩阵的导数运算(理解分子布局、分母布局) 1、分子布局和分母布局 请思考这样一个问题,一个维度为m的向量y对一个标量x的求导,那么结果也是一个m维的向量,那么这个结果向量是行向量,还是列向量呢? 答案是&#xff1a…

Spring及工厂模式概述

文章目录 Spring 身世什么是 Spring什么是设计模式工厂设计模式什么是工厂设计模式简单的工厂设计模式通用的工厂设计 总结 在 Spring 框架出现之前,Java 开发者使用的主要是传统的 Java EE(Java Enterprise Edition)平台。Java EE 是一套用于…

《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)

文章目录 3.1 编写 Dockerfile3.1.1 重点基础知识3.1.2 重点案例:创建简单 Python 应用的 Docker 镜像3.1.3 拓展案例 1:Dockerfile 优化3.1.4 拓展案例 2:多阶段构建 3.2 构建流程深入解析3.2.1 重点基础知识3.2.2 重点案例:构建…

港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大计划建立北部都会区卫星校园完善“科大创新带”,发展未来创新科技、未来医药发展及跨学科教育。香港科大校长叶玉如教授在2月22日的媒体会议上表示,香港科大将在北部都会区建立卫星校园&a…

open3d KD-Tree K近邻点搜索

open3d KD-Tree K近邻点搜索 一、算法原理1.KD-Tree 介绍2.原理 二、代码三、结果1.原点云2.k近邻点搜索后的点云 四、相关数据 一、算法原理 1.KD-Tree 介绍 kd 树或 k 维树是计算机科学中使用的一种数据结构,用于在具有 k 维的空间中组织一定数量的点。它是一个…

【Spring MVC】处理器映射器:AbstractHandlerMethodMapping源码分析

目录 一、继承体系 二、HandlerMapping 三、AbstractHandlerMapping 四、AbstractHandlerMethodMapping 4.1 成员属性 4.1.1 MappingRegistry内部类 4.2 AbstractHandlerMethodMapping的初始化 4.3 getHandlerInternal()方法:根据当前的请求url,…

从git上clone项目到本地后启动时的一种报错

当我们从git上拉项目到本地之后,先install,但启动时可能会出现报错,例如上面这种报错,这时候我们需要把package.json里的vite改一下,例如改成2.6.13,之后删掉node_modules,重新install,再启动一下,就好了。…

OT 安全解决方案:探索技术

IT 和 OT 安全的融合:更好的防御方法 OT 安全解决方案下一个时代: 为了应对不断升级的威胁形势,组织认识到迫切需要采用统一的信息技术 (IT) 和运营技术 (OT) 安全方法。IT 和 OT 安全的融合代表了一种范式转变,承认这些传统孤立领…

音频smmu问题之smmu学习

一、音频smmu 内存访问问题 在工作中,遇到一个smmu问题,主要log信息如下: arm-smmu 15000000.apps-smmu: Unhandled arm-smmu context fault from soc:spf_core_platform:qcom,msm-audio-ion! arm-smmu 15000000.apps-smmu: FAR 0x0000000…

什么是负载均衡集群?

目录 1、集群是什么? 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡(基于IP端口的负载均衡) 7、七层的负载均衡(基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…

(3)(3.6) 用于OpenTX的Yaapu遥测脚本

文章目录 前言 1 安装和操作 2 参数说明 前言 这是一个开源 LUA 脚本,用于在使用 OpenTX 2.2.3 的 Horus X10、X12、Jumper T16、T18、Radiomaster TX16S、Taranis X9D、X9E、QX7 和 Jumper T12 无线电设备上显示 FrSky 的直通遥测数据(FrSky passthrough telem…