MySQL中的开发基于Python的SQL工具类操作数据库简单示例

操作数据库封装SQL工具类的两种方式

  • 为了更方便的实现基于连接池和pymysql 连接数据库,需开发一个sql工具类来让sql操作更简洁
  • 用两张方式来封装SQL工具类

1 )单例模式

封装 db.py 工具类

import pymysql
from dbutils.pooled_db import PooledDBclass DBHelper(object):def __init__(self):self.pool = PooledDB(creator=pymysql,maxconnections=5,mincached=2,maxcached=3,blocking=True,setsession=[],ping=0,host='127.0.0.1',port=3306user='root',password='xxxxx',database='userdb',charset='utf8')def get_conn_cursor(self):conn = self.pool.connection()cursor=conn.cursor(pyymsql.cursors.DictCursor)return conn, cursordef close_conn_cursor(self, *args):for item in args:item.close()def exec(self, sql, **kwargs):conn, cursor = self.get_conn_cursor()cursor.execute(sql, kwargs)conn.commit()self.close_conn_cursor(conn, cursor)def fetch_one(self, sql, **kwargs):conn, cursor = self.get_conn_cursor()cursor.execute(sql, kwargs)result = cursor.fetchone()self.cloes_conn_cursor(conn, cursor)return resultdef fetch_all(self, sql, **kwarrgs):conn, cursor = self.get_conn_cursor()cursor.execute(sql, kwargs)result = cursor.fetchall()self.close_conn_cursor(conn, cursor)db = DBHelper()

xxx.py 调用示例

from db import dbv1 = db.fetch_one("select * from d1")
print(v1)v2 = db.fetch_one('select * from d1 where id=%(nid)s ', nid=3)
print(v2)

2 ) 上下文管理

基于 with 上下文管理

with 获取连接:执行sql (执行完毕后,自动将连接交还给连接池)

封装 db_context.py

import threading
import pymysql
from dbutils.pooled_db import PooledDBPOOL = PooledDB(creator=pymysql, # 使用连接数据库的模块maxconnections=5,mincached=2,maxcached=3,blocking=True,setssion=[],ping=0,host='127.0.0.1'port=3306,user='root',password='xxxx',database='userdb',charset='utf8'
)class Connect(object):def __init__(self):self.conn = conn = POOL.connection() # 连接self.cursor = conn.cursor(pymysql.cursors.DictCursor) # 游标def __enter__(self):return selfdef __exit__(self, exc_type, exc_val, exc_tb):self.cursor.close()self.conn.close()def exec(self, sql, **kwargs):self.cursor.execute(sql, kwargs)self.conn.commit()def fetch_one(self, sql, **kwargs):self.cursor.execute(sql, kwargs)result = self.cursor.fetchone()return resultdef fetch_all(self, sql, **kwargs):self.cursor.excute(sql, kwargs)result = self.cursor.fetchall()return result

yyy.py 调用示例

from db_context import Connect### 实例化 对象得到值
with Connect() as obj:ret = obj.fetch_one('select * from d1')print(ret)ret = obj.fetch_one("select * from d1 where id=%(id)s", id=3)print(ret)

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

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

相关文章

【uniapp】APP打包上架应用商-注意事项

初雪云-uniapp启动图自定义生成(支持一键生成storyboard) 一、修改App端上传图片/视频 uni.uploadFile let thatthis; uni.chooseImage({count: 1,sourceType: [camera,album],sizeType: [compressed, original],success: rey > {uni.showLoading({ t…

通过分析 JDK 源代码研究 Hash 存储机制

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚…

dp--70.爬楼梯/easy 熟悉度C

70.爬楼梯 1、题目2、题目分析2.1 动态规划的三个特征:2.2 如何定义动态规划的状态 3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&am…

企业网盘全方位解读:热门云存储工具的优势与适用场景

企业网盘无疑是当下最热门的企业协同工具。什么是企业网盘?企业网盘与个人网盘又有什么不同呢?一文全方位解读企业网盘这一热门云存储工具。 什么是企业网盘 企业网盘为企业级文件存储、管理与共享平台,企业团队可以在企业网盘中存储企业文…

基于eNSP的IPv6校园网络规划与设计_综合实验

作者:BSXY_19计科_陈永跃 BSXY_信息学院 注:未经允许禁止转发任何内容 基于eNSP的IPv6校园网络规划与设计(综合实验) 前言及技术/资源下载说明( **未经允许禁止转发任何内容** )一、设计topo图与设计要求二…

新概念英语第二册(21)

【New words and expressions】生词和短语(4) mad adj. 发疯 reason n. 原因 sum n. 量 determined adj. 坚定的,下决心的 ★mad …

【设计模式】备忘录模式

一起学习设计模式 目录 前言 一、概述 二、结构 三、案例实现 1、 “白箱”备忘录模式 2、“黑箱”备忘录模式 四、优缺点 五、使用场景 总结 前言 【设计模式】备忘录模式——行为型模式。 一、概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以…

Maven之多环境配置与应用

多环境配置与应用 1. 多环境配置作用 maven提供配置多种环境的设定&#xff0c;帮助开发者使用过程中快速切换环境 2. 多环境配置步骤 2.1 定义多环境 <!--定义多环境--> <profiles><!--定义具体的环境&#xff1a;生产环境--><profile><!--定义…

信息学奥赛一本通-编程启蒙3259:练42.5 大象喝水

3259&#xff1a;练42.5 大象喝水 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1234 通过数: 682 【题目描述】 一只大象口渴了&#xff0c;要喝 2020 升水才能解渴&#xff0c;但现在只有一个深 hh 厘米&#xff0c;底面半径为 rr 厘米的小圆桶&#xff08;hh…

npm、pnpm和yarn 的区别

包管理工具是JavaScript开发中不可或缺的一部分&#xff0c;它们可以帮助我们方便地安装、更新、删除和管理项目所依赖的各种库和模块。 目前&#xff0c;最流行的包管理工具有npm、yarn和pnpm&#xff0c;它们各有各的特点和优劣势。 本文将试着对这三个工具进行全面的对比。…

Android学习(三):在Android虚拟机中运行项目

Android学习&#xff08;三&#xff09;&#xff1a;在Android虚拟机中运行项目 一、前期准备 在系统环境变量中添加ANDROID_SDK_HOME&#xff0c;把值指定到一个其他目录。就可以把Android AVD(虚拟机)创建在指定目录下。修改环境变量后&#xff0c;如果Android Studio是在运…

ROS-[ERROR] [1704543158.960463911]: length [stent_height] is not a valid float

出现如图所示报错 原因&#xff1a;未能正确调用&#xff0c;忘记加${}了

大数据平台Bug Bash大扫除最佳实践

一、背景 随着越来越多的"新人"在日常工作以及大促备战中担当大任&#xff0c;我们发现仅了解自身系统业务已不能满足日常系统开发运维需求。为此&#xff0c;大数据平台部门组织了一次Bug Bash活动&#xff0c;既能提升自己对兄弟产品的理解和使用&#xff0c;又能…

Nginx: 弱扫和安全策略

Nginx弱扫和安全策略 最近在公司配置Nginx,一下子又变成了运维人员 ╮(╯▽╰)╭ , 这是我整理对 服务器弱扫 的一些 配置 server {#监听443端口listen 443;#你的域名server_name www.example.com; // 域名ssl_certificate www.example.com.crt; // https 证书ss…

使用UDP和JSON在C#中高效发送结构体数据

使用UDP和JSON在C#中高效发送结构体数据 引言 在许多网络编程场景中&#xff0c;我们经常需要在不同的应用程序或服务之间发送和接收数据。UDP&#xff08;用户数据报协议&#xff09;因其低延迟和少开销的特点&#xff0c;在需要快速数据传输的场景中非常有用。本文介绍了如何…

基于SpringBoot的物资综合管理系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的物资综合管理系统的设计…

优雅的通过Shell脚本生成Go的程序包

概要 本文将介绍如何使用 Shell 脚本打包来优雅地生成Go的程序包。我们将创建一个简单的脚本&#xff0c;用于构建、测试和部署 Golang 项目。 前言 随着Go语言的普及&#xff0c;越来越多的开发人员选择使用Go编写代码。虽然越来越多的公司项目已使用持续集成/持续部署&…

CnosDB容灾方案概述

本文主要介绍了跟容灾相关的关键技术以及技术整合后形成的几种具体方案&#xff0c;每种方案都在RTO、RPO、部署成本和维护成本等方面有自己的特点和区别&#xff0c;可以根据具体场景选择最合适的方案。 基本概念 RTO&#xff08;Recovery Time Objective&#xff09;&#x…

欧几里得算法总结

知识概览 欧几里得算法也叫辗转相除法&#xff0c;核心原理是(a, b) (b, a mod b)&#xff0c;时间复杂度为O(logn)。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www…

力扣(leetcode)第434题字符串中的单词数(Python)

434.字符串中的单词数 题目链接&#xff1a;434.字符串中的单词数 统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 请注意&#xff0c;你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: “Hello, my name is John” 输出: 5 解释: 这…