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

【Python模块】——pymysql

pymysql是python操作mysql的标准库,可以通过pip install快速导入pymysql包操作数据库

使用pymysql操作mysql

简单demo

import pymysql
connect = pymysql.connect(host="localhost",port=3306,user="root",password="root",database="my_database",# charset="utf8mb4"
)
cursor = connect.cursor()# 查询语句1
sql = "select * from user where name = %(name)s"
ret = cursor.execute(sql, {"name": "ls"})
# 查询语句2
sql = "select * from user where name = %s"
ret = cursor.execute(sql, "ls")
print(ret)result = cursor.fetchall()
print("result", result)cursor.close()
connect.close()

自定义SqlHelper

import pymysqlclass MySQLClient(object):def __init__(self, **kwargs):self.conn = pymysql.connect(**kwargs)self.cursor = self.conn.cursor()def query(self, sql, *args):try:rowcount = self.cursor.execute(sql, *args)return rowcountexcept Exception as e:raise edef update(self, sql, *args):self.cursor.execute(sql, *args)self.conn.commit()def insert(self, sql, *args):self.cursor.execute(sql, *args)self.conn.commit()def fetch_one(self, sql, *args):self.query(sql, *args)result = self.cursor.fetchone()return resultdef fetch_all(self, sql, *args):self.query(sql, *args)result = self.cursor.fetchone()return resultdef close(self):self.cursor.close()self.conn.close()config = {"host": "localhost","port": 3306,"user": "root","password": "root","database": "my_database",
}mysql_client = MySQLClient(**config)
sql = "select * from user where name=%s"
ret = mysql_client.fetch_one(sql, "ls")
print(ret)# mysql_client.close()

借助DButils创建数据库连接池

DButils模块可以通过创建数据库连接池,提升数据库操作性能;
实现思路:

  1. 定义SqlHelper类
  2. 通过__init__方法定义pool=PoolDB(**kwargs),_local=threading.local()
  3. 定义__enter__获取connection与cursor和__exit__关闭connection与cursor,可支持with 上下文操作
  4. 为了保证每次获取的connection与cursor不会将之前的覆盖掉,引入threading.local进行保存;self._local = {thread_id: {“stack”: [(connection, cursor)]}}
#!/usr/bin/env python  
# -*- coding:utf-8 -*-  
import pymysql
from dbutils.pooled_db import PooledDB
from threading import localclass SqlHelper(object):def __init__(self):self.pool = PooledDB(creator=pymysql,  # 使用链接数据库的模块maxconnections=5,  # 连接池允许的最大连接数,0和None表示不限制连接数mincached=1,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建# maxcached=5,  # 链接池中最多闲置的链接,0和None不限制blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制setsession=[],  # 开始会话前执行的命令列表host='localhost',port=3306,user='root',password='root',database='my_database',charset='utf8')self._local = local()def open(self):connection = self.pool.connection()cursor = connection.cursor()return  connection, cursordef close(self, cursor, conn):cursor.close()conn.close()def __enter__(self):conn, cursor = self.open()rv =  getattr(self._local, "stack", None)if not rv:self._local.stack = [(conn, cursor)]else:self._local.stack.append((conn, cursor))return cursordef __exit__(self, exc_type, exc_val, exc_tb):rv = getattr(self._local, "stack", None)if not rv:# del self._local.stackreturnelif len(rv) == 1:conn, cursor = rv[-1]# del self._local.stackreturnelse:conn, cursor = rv.pop()cursor.close()conn.close()def fetchone(self, sql, *args):conn, cursor = self.open(self)try:rowcount = cursor.execute(sql, *args)ret = cursor.fetchone()return retexcept Exception as e:raisedef fetchall(self, sql, *args):conn, cursor = self.open(self)try:rowcount = cursor.execute(sql, *args)ret = cursor.fetchall()return retexcept Exception as e:raisedb = SqlHelper()sql = "select * from user"
with db as c1:ret = c1.execute(sql)print(ret)with db as c2:ret = c2.execute(sql)print(ret)

使用DButils的另一种写法

使用这种写法,每次都实例化SqlHelper,保证每次获取的connection和cursor不被覆盖

#!/usr/bin/env python  
# -*- coding:utf-8 -*-  
""" 
1. 定义全局变量POOL=pooledDB(**kwargs)
2. 每次用到db就实例化一次
"""
import pymysql
from dbutils.pooled_db import PooledDB
from threading import localpool = PooledDB(creator=pymysql,  # 使用链接数据库的模块maxconnections=0,  # 连接池允许的最大连接数,0和None表示不限制连接数mincached=1,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建# maxcached=5,  # 链接池中最多闲置的链接,0和None不限制blocking=False,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制setsession=[],  # 开始会话前执行的命令列表host='localhost',port=3306,user='root',password='root',database='my_database',charset='utf8')class SqlHelper(object):def __init__(self):self.conn = Noneself.cursor = Nonedef open(self):self.connection = pool.connection()self.cursor = self.connection.cursor()return  self.connection, self.cursordef close(self):self.cursor.close()self.conn.close()def __enter__(self):self.conn, self.cursor = self.open()return self.cursordef __exit__(self, exc_type, exc_val, exc_tb):self.close()db = SqlHelper()sql = "select * from user"
with db as c1:ret = c1.execute(sql)print("c1.cursor: ", db.cursor)print(ret)with db as c2:ret = c2.execute(sql)print("c2.cursor: ", db.cursor)  # 一个实例对象是可以多次调用enter方法的,但db.cursor发生了改变,即上一次的连接丢了print(ret)print(type(c1), type(c2))print(c1 is c2) # falseprint("c1.cursor: ", db.cursor) # c2.cursor将c1.cursor覆盖了

相关文章:

【Python模块】——pymysql

pymysql是python操作mysql的标准库,可以通过pip install快速导入pymysql包操作数据库 使用pymysql操作mysql 简单demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…...

在Spring Boot中如何使用Freemaker模板引擎

在 Spring Boot 中使用 FreeMarker 模板引擎可以帮助你创建动态的 Web 页面。以下是详细的步骤和示例代码,介绍如何在 Spring Boot 项目里集成和使用 FreeMarker。 1. 添加依赖 如果你使用的是 Maven 项目,需要在 pom.xml 文件中添加 FreeMarker 相关依赖。Spring Boot 提供…...

数据驱动未来!天合光能与永洪科技携手开启数字化新篇章

在信息化时代的今天,企业间的竞争早就超越了传统产品与服务的范畴,新的核心竞争力即——数据处理能力和信息技术的应用。作为数据技术领域的领军者,永洪科技凭借其深厚的技术积累和丰富的行业经验,成功助力天合光能实现数字化升级…...

JavaScript数据结构-模拟链表

在JavaScript中没有链表这种数据结构,但是我们可以用对象(Object)模拟链表,下面让我们先了解链表是什么。 链表(Linked List)是一种基础的数据结构,由一系列节点(Node)组成,每一个节…...

使用 Apache Jena 构建 RDF 数据处理与查询服务

一、引言 随着语义网和知识图谱技术的不断发展,RDF(Resource Description Framework)作为一种用于描述资源的框架,被广泛应用于知识表示和数据集成。Apache Jena 是一个功能强大的 Java 框架,用于处理 RDF 数据和 SPA…...

tableau之网络图和弧线图

一、网络图 概念 网络图(Network Graph),也称为网络可视化,是数据可视化的一种形式,用于显示实体(节点)之间的关系(边)。这种图表通过节点和边的结构揭示数据中的复杂关…...

el-date-picker 组件限制禁止选择当前时间之前的时间

页面代码 <el-date-pickerv-model"xxx.startTime"type"datetime"placeholder"请选择开始时间"value-format"YYYY-MM-DD HH:mm:ss"clearable:disabledDate"disabledDateFn":disabled-hours"disabledHours":dis…...

Linux网络数据包接收:原理、流程与优化策略

在当今数字化时代&#xff0c;网络已成为计算机系统不可或缺的部分。无论是日常的网页浏览、文件传输&#xff0c;还是大规模数据中心的高效通信&#xff0c;网络数据包的收发都在其中扮演着重要角色。对于 Linux 系统而言&#xff0c;深入理解网络数据包的接收过程&#xff0c…...

django model.object.filter 不等于多个值

关于Django中QuerySet.filter()的使用问题。首先&#xff0c;我会分别针对“不等于多个值”的代码开发问题和可能遇到的报错问题给出解答。 代码开发问题&#xff1a;QuerySet.filter()不等于多个值 在Django中&#xff0c;如果你想在查询中排除多个值&#xff0c;可以使用__i…...

sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现

分类树实例&#xff1a;分类树在合成数据集上的表现 代码分解 在不同结构的据集上测试一下决策树的效果&#xff08;二分型&#xff0c;月亮形&#xff0c;环形&#xff09; 导入 import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import Li…...

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…...

棒球和垒球区别·棒球1号位

棒球运动和垒球运动的区别主要体现在以下几个方面&#xff1a; 1. 用球差异&#xff1a;垒球比棒球大且重。棒球的直径大约是7.3厘米&#xff0c;重量通常在145克左右&#xff0c;外皮由皮革制成&#xff0c;质地较硬。而垒球的直径为9.7厘米&#xff0c;重量大约为180克左右&a…...

Redis|持久化

文章目录 总体介绍RDB&#xff08;Redis DataBase&#xff09;官网介绍案例演示优势劣势如何检查修复 dump.rdb 文件哪些情况下会触发 RDB 快照如何禁用快照RDB 优化配置项详解小总结 AOF&#xff08;Append Only File&#xff09;官网介绍是什么能干嘛AOF 持久化工作流程AOF 缓…...

UE5销毁Actor,移动Actor,简单的空气墙的制作

1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数&#xff0c;它会立即标记 Actor 为销毁状态&#xff0c;并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程&#xff0c;调用 Destroy() 后&#xff0c;Actor 立即进入销毁过程。具体…...

蓝桥杯备赛-迷宫-BFS

这是一个关于二维迷宫的题目。我们要从迷宫的起点 S 走到终点 E&#xff0c;每一步我们只能选择上下左右四个方向中的一个前进一格。 W 代表墙壁&#xff0c;是不能进入的位置&#xff0c;除了墙壁以外的地方都可以走。迷宫内的 D 代表一道上锁的门&#xff0c;只有在持有钥匙的…...

设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)

文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中&#xff0c;对象的创建是一个常见且基础的操作。然而&#xff0c;当项目规模逐渐…...

Windows前端开发IDE选型全攻略

Windows前端开发IDE选型全攻略 一、核心IDE对比矩阵 工具名称最新版本核心优势适用场景推荐指数引用来源VS Code2.3.5轻量级/海量插件/跨平台/Git深度集成全栈开发/中小型项目⭐⭐⭐⭐⭐14WebStorm2025.1智能提示/框架深度支持/企业级调试工具大型项目/专业前端团队⭐⭐⭐⭐47…...

大模型训练中的数据不平衡问题及其解决策略

目录 大模型训练中的数据不平衡问题及其解决策略 一、数据不平衡问题的影响 二、处理数据不平衡问题的方法 1. 过采样&#xff08;Oversampling&#xff09; 2. 欠采样&#xff08;Undersampling&#xff09; 3. 代价敏感学习&#xff08;Cost-Sensitive Learning&#xf…...

Flask应用实战经验总结:使用工厂函数创建app与uWSGI服务部署启动失败解决方案

在 Flask 应用开发中&#xff0c;使用工厂函数创建应用实例&#xff0c;并借助 uWSGI 服务进行部署&#xff0c;是常见且高效的组合。 然而&#xff0c;在实际操作过程中&#xff0c;uWSGI 配置文件与应用启动函数之间的关系复杂&#xff0c;容易引发各种问题。 本文将详细探…...

基于Spring Boot的党员学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

TCP/IP的分层结构、各层的典型协议,以及与ISO七层模型的差别

1. TCP/IP的分层结构 TCP/IP模型是一个四层模型&#xff0c;主要用于网络通信的设计和实现。它的分层结构如下&#xff1a; (1) 应用层&#xff08;Application Layer&#xff09; 功能&#xff1a;提供应用程序之间的通信服务&#xff0c;处理特定的应用细节。 典型协议&am…...

【2025-02-25】基础算法:二分查找(一)

&#x1f4dd;前言说明&#xff1a; ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;主要跟随B站博主灵茶山的视频进行学习&#xff0c;专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…...

WebRTC解析

一、WebRTC 协议概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;是由 Google 发起并成为 W3C 标准的实时音视频通信技术&#xff0c;核心特点&#xff1a; 零插件&#xff1a;浏览器原生支持端到端加密&#xff08;SRTP DTLS&#xff09;P2P 优先架构&…...

BERT模型详解及代码复现

架构设计 BERT模型的架构设计是其成功的关键之一,它巧妙地融合了Transformer架构的优势,并针对自然语言处理任务进行了优化。具体来说,BERT的架构主要由三个模块组成: Embedding模块 :负责将输入的文本转换为模型可处理的向量表示。该模块由三种Embedding组成: Token Em…...

如何在 SpringBoot 项目使用 Redis 的 Pipeline 功能

本文是博主在批量存储聊天中用户状态和登陆信息到 Redis 缓存中时&#xff0c;使用到了 Pipeline 功能&#xff0c;并对此做出了整理。 一、Redis Pipeline 是什么 Redis 的 Pipeline 功能可以显著提升 Redis 操作的性能&#xff0c;性能提升的原因在于可以批量执行命令。当我…...

Python Django系列—入门实例

我们假定你已经阅读了​ 安装 Django。你能知道 Django 已被安装&#xff0c;且安装的是哪个版本&#xff0c;通过在命令提示行输入命令&#xff08;由 $ 前缀&#xff09;。 $ python -m django --version 如果这行命令输出了一个版本号&#xff0c;证明你已经安装了此版本的…...

2024年第十五届蓝桥杯青少 图形化编程(Scratch)省赛中级组真题——截取递增数

截取递增数 背景信息 递增数&#xff1a;如果一个大于9的正整数各个数位上的数&#xff0c;从左到右是逐渐变大的&#xff0c;那么就称这个数为递增数。 例如124、248 是递增数。 给你一个不含0的九位数&#xff0c;请找出从这个九位数中能截取出的所有递增数。例如:115367…...

【ECMAScript6】

【ECMAScript6】 01. ES6介绍02. let和const命令03. 模板字符串04. 函数之默认值、剩余参数05. 函数之扩展运算符、箭头函数06. 箭头函数this指向和注意事项07. 解构赋值08. 扩展的对象的功能&#xff08;简写&#xff09;09. Symbol类型10. Set集合数据类型11. Map数据类型12.…...

WebUI 部署 Ollama 可视化对话界面

文章目录 一、Node.js 安装1.系统环境查询2.官网下载nodejs 安装包3.安装 Node.js 并配置环境变量4.验证安装是否正确 二、ollama-webui 安装与配置1.代码库下载2.依赖安装3.运行 三、遇到问题与解决 一、Node.js 安装 1.系统环境查询 ubuntu20.04 系统&#xff0c;x86-64架构…...

BMS应用软件开发 — 17 上下电控制与诊断开发 (Simulink)

目录 17.1 上下电控制流程 17.1.1 上下电流程 17.1.2 下电过程的电机放电 17.1.3 继电器状态检测 17.2 预充继电器状态判断 17.1 上下电控制流程 17.1.1 上下电流程 高压上电是指动力电池为车辆提供高压&#xff0c;使高压回路导通&#xff0c;为车辆的各个高压部件供电&…...