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

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)

相关文章:

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

操作数据库封装SQL工具类的两种方式 为了更方便的实现基于连接池和pymysql 连接数据库,需开发一个sql工具类来让sql操作更简洁用两张方式来封装SQL工具类 1 )单例模式 封装 db.py 工具类 import pymysql from dbutils.pooled_db import PooledDBclas…...

安卓Android Studio读写FM1208CPU卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.6c46789elLwMzv&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout x…...

二、Redis的特性与应用场景

Redis是一个在内存中存储数据的中间件&#xff0c;主要用于作为数据库、数据缓存&#xff0c;在分布式系统中有着非常重要的地位。面试中可以围绕Redis的特性进行介绍。 一、Redis特性 1、在内存中存储数据 MySQL主要是“表”的方式来存储组织数据的&#xff0c;是“关系型数…...

编程笔记 html5cssjs 019 HTML实体

编程笔记 html5&css&js 019 HTML实体 一、HTML 字符实体二、HTML 符号实体小结 在HTML文档中&#xff0c;用一些标记表示特定的格式&#xff0c;那我们想使用这些标记字符本身时就出了问题&#xff0c;直接使用时&#xff0c;会被浏览器解析为标记的&#xff0c;要想显…...

数据结构:树详解

创建二叉树 给出了完整的先序遍历序列&#xff0c;子树为空用’#’表示&#xff0c;所以这样我们在通过先序遍历序列创建二叉树时我们直到先序遍历序列是先进行根结点&#xff0c;然后左子树最后右子树的顺序进行遍历的&#xff0c;所以对于完整的先序遍历序列我们可以直到先序…...

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性&#xff0c;不能直接使用减法运算符进行比较。减法运算符只能用于数值类型&#xff0c;而 double 是浮点数类型。 要在 double 属性上进行排序&#xff0c;可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…...

GoLang vs Python

Python和Go是两种非常不同的编程语言&#xff0c;它们在设计哲学、用途和特性方面有各自的优势和局限性。以下是它们的一些主要区别&#xff1a; 设计哲学: Python: 设计简洁明了&#xff0c;强调代码的可读性和简洁性。Python遵循"只有一种方式来做一件事"的原则。…...

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意&#xff1a;共有俩钱包&#xff0c;每回合从其中一个钱包中拿走一块钱&#xff0c;谁拿走最后一块钱谁赢。 思路&#xff1a;奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…...

Python+Torch+FasterCNN网络目标检测识别

程序示例精选 PythonTorchFasterCNN网络目标检测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonTorchFasterCNN网络目标检测识别》编写代码&#xff0c;代码整洁&#xff0c;规…...

v8 pwn利用合集

文章目录 前置知识JS Object 相关Ignition 相关JIT - turboFan 相关starCTF2019 OOB【越界读写map字段】googleCTF2018 jit【浮点数精度丢失导致越界读写】数字经济线下 Browser【Object::toNumber中callback导致的越界写】前置知识 JS Object 相关 V8 中的对象表示 ==> 基…...

JVM:字节码

JVM&#xff1a;字节码 前言1. JVM概述1.1 JVM vs JDK vs JRE1.1.1 JVM1.1.2 JDK1.1.2.1 常用的JDK8是Oracle JDK 还是 OpenJDK 1.1.3 JRE1.1.4 三者之间的关系与区别 1.2 什么是字节码?采用字节码的好处是什么?1.3 Java 程序从源代码到运行的过程1.4 JVM的生命周期1.5 JVM架…...

常见网络设备及功能详解

网络设备 - 交换机 交换机&#xff1a;距离终端用户最近的设备&#xff0c;用于终端用户接入网络、对数据帧进行交换等。 交换机的功能&#xff1a; 终端设备&#xff08;PC、服务器等&#xff09;的网络接入二层交换&#xff08;Layer 2 Switching&#xff09; 网络设备 - …...

Python教程(20)——python面向对象编程基本概念

面向对象 类和对象初始化方法属性和方法self关键字继承多态 面向对象&#xff08;Object-oriented&#xff09;是一种常用的程序设计思想&#xff0c;它以对象作为程序的基本单元&#xff0c;将数据和操作封装在一起&#xff0c;通过对象之间的交互来实现程序的功能。 在面向对…...

C# Winform教程(一):MD5加密

1、介绍 在C#中&#xff0c;MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于将任意长度的数据转换为固定长度的哈希值&#xff08;通常是128位&#xff09;。MD5广泛用于校验数据完整性、密码存储等领域。 2、示例 创建MD5加密…...

Mongodb使用指定索引删除数据

回顾Mongodb删除语法 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;除了指定过滤器外&#xff0c;还可以指定写入策略&#xff0c;字符序和使用的索引。 …...

虾皮怎么选品:虾皮(Shopee)跨境电商业务成功的关键步骤

在虾皮&#xff08;Shopee&#xff09;平台上进行跨境电商业务&#xff0c;选品是至关重要的一环。有效的选品策略可以帮助卖家更好地了解市场需求&#xff0c;提高销售业绩和客户满意度。以下是一些成功的选品策略&#xff0c;可以帮助卖家在虾皮平台上取得更好的业务成绩。 先…...

QML —— 使用Qt虚拟键盘示例(附完整源码)

示例效果 使用"虚拟键盘"注意 &#xff08;例子的Qt版本:5.12.4&#xff09; 注意一&#xff1a;      /* 必须在main.cpp开始处加入如下代码&#xff0c;否则无法使用"虚拟键盘" */      qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeybo…...

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务&#xff0c;管理起来非常简单&#xff0c;但…...

win10下vscode+cmake编译C代码操作详解

0 工具准备 1.Visual Studio Code 1.85.1 2.cmake 3.24.01 前言 当我们只有一个.c文件时直接使用vscodeCode Runner插件即可完成编译&#xff0c;如果我们的工程很复杂包含多个.c文件时建议使用cmake来生成对应的make&#xff0c;指导编译器完成编译&#xff0c;否则会提示各…...

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面&#xff0c;通过对收集的信息进行梳理&#xff0c;定位到安全薄弱点&#xff0c;从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…...

Swin Transformer生产部署与性能调优:从环境适配到架构优化的全周期解决方案

Swin Transformer生产部署与性能调优&#xff1a;从环境适配到架构优化的全周期解决方案 【免费下载链接】Swin-Transformer This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows". 项目地址: http…...

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码)

JS逆向新手也能搞定&#xff1a;手把手教你用Node.js补全ali140滑块canvas环境&#xff08;附完整代码&#xff09; 第一次接触JS逆向时&#xff0c;看到那些复杂的加密逻辑和环境检测代码&#xff0c;确实让人望而生畏。特别是遇到canvas这种需要模拟浏览器环境的场景&#xf…...

ER-Save-Editor:艾尔登法环存档修改工具全解析

ER-Save-Editor&#xff1a;艾尔登法环存档修改工具全解析 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor ER-Save-Editor是一款开源的艾尔登法…...

M2LOrder模型Git版本控制实践:团队协作下的模型微调与部署

M2LOrder模型Git版本控制实践&#xff1a;团队协作下的模型微调与部署 你是不是也遇到过这样的情况&#xff1f;团队里几个人一起折腾一个AI模型&#xff0c;今天张三改了点代码&#xff0c;明天李四更新了配置文件&#xff0c;后天王五又传了个新数据集。结果没过几天&#x…...

LightGBM实战:极速梯度提升框架的多变量时序预测深度解析

LightGBM实战&#xff1a;极速梯度提升框架的多变量时序预测深度解析 【免费下载链接】LightGBM microsoft/LightGBM: LightGBM 是微软开发的一款梯度提升机&#xff08;Gradient Boosting Machine, GBM&#xff09;框架&#xff0c;具有高效、分布式和并行化等特点&#xff0c…...

Gurobi Python接口避坑指南:从安装、建模到求解电影排片问题的实战记录

Gurobi Python实战避坑手册&#xff1a;电影排片优化全流程解析 第一次接触Gurobi时&#xff0c;我被它号称的"商业求解器性能标杆"吸引&#xff0c;却在安装环节就被Anaconda环境冲突绊住了脚步。作为从开源求解器转战商业工具的用户&#xff0c;我完整记录了从零开…...

抛弃Keil吧!用Clion调试STM32的5个高效技巧(HAL库实战)

抛弃Keil吧&#xff01;用Clion调试STM32的5个高效技巧&#xff08;HAL库实战&#xff09; 从Keil切换到Clion开发STM32&#xff0c;就像从手动挡升级到自动驾驶——代码补全、智能重构和跨平台支持带来的效率提升&#xff0c;能让开发者更专注于逻辑实现而非工具折腾。本文将…...

基于uniapp的SUPOIN PDA激光扫码广播监听功能实现与优化

1. 为什么选择SUPOIN PDA激光扫码方案 在工业级移动应用中&#xff0c;扫码功能可以说是刚需中的刚需。我做过不少仓库管理、物流配送的项目&#xff0c;深刻体会到扫码速度差个0.5秒&#xff0c;工人一天下来就能多处理上百件货物。SUPOIN PDA设备自带的激光扫码模块&#xf…...

3步实现视频转PPT:extract-video-ppt工具让内容提取效率提升80%

3步实现视频转PPT&#xff1a;extract-video-ppt工具让内容提取效率提升80% 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 在数字化办公日益普及的今天&#xff0c;视频转PPT工具已…...

探索开源字体商用解决方案:思源宋体TTF的多场景应用与价值解析

探索开源字体商用解决方案&#xff1a;思源宋体TTF的多场景应用与价值解析 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 副标题&#xff1a;免费商用授权与多场景适配的专业中文字体…...