收集了一些用python做mysql增删改查的资料

还是因为最近在开发fastapi应用、现在需要把一些关键信息存库,所以就很想要一些这方面的资料。我这里找到一些,希望你看了帖子能节省一些时间。

前边说过如何搭建fastapi开发环境,帖子链接为:
https://blog.csdn.net/weixin_42988262/article/details/148684972?spm=1001.2014.3001.5501
还说过如何搭建可用的mysql环境,帖子链接为:
https://blog.csdn.net/weixin_42988262/article/details/148716542?spm=1001.2014.3001.5501
所以,本文相关的部分就简化甚至省略掉了。

# 首先试一下pymysql

问一下ai或者自己搜一下,很容易就了解到这个东东,所以我就先试了一下

环境说明

我这里是用的《考古一下如何搭建可用的mysql环境》那个帖子时搞的虚拟机,操作系统Anolis8.6,已经装了mysql,不同的是我给/etc/my.cnf.d/mysql-server.cnf加了这一行:

systemctl restart mysqld,就可以看到监听的是127.0.0.1了:

 

这样从本机安装python3.9和python包“pymysql”,就可以连同在这个虚拟机上的mysql server了;如果再安装python包“fastapi[standard]”、DBUtils,就可以尝试使用连接池了。

安装python3.9、pymysql

安装一下python3.9

安装pip、setup tools、wheel:

确保pip、setup tools、wheel最新:

创建虚拟环境并激活、安装pymsyql:

去mysql创建数据库和表

CREATE TABLE `all_requests` (`col1` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `col2` char(200) DEFAULT NULL);

准备脚本main.py

文字版贴到这里:
(pymysql.ve) [root@localhost tryPymysql]# more main.py 
import pymysql
def insert_data_pymysql():try:# 建立数据库连接connection = pymysql.connect(host='127.0.0.1',user='root',password='xxxxxxxx',database='reqs',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)with connection:with connection.cursor() as cursor:# 插入单条数据sql = "INSERT INTO all_requests (col1, col2) VALUES (%s, %s)"cursor.execute(sql, ("value1", "value2"))    # 提交事务connection.commit()print("记录插入成功")     except pymysql.MySQLError as e:print(f"数据库错误: {e}")insert_data_pymysql()

试试效果:

查一下看看:

# 弄个连接池,免得每次都去连接

到这里,就得考虑用连接池的事情了。不过,我们首先看一下如何查看mysql的连接数

如何查看mysql的连接数

我们开一个bash,登录mysql,执行SHOW STATUS LIKE 'Threads_connected';

 

再启动一个bash终端,也登录mysql,连接一下看看,变成2了:

关掉其中一个,用另一个看,成了1了,很稳。

安装DBUtils、fastapi

python3 -m pip install DBUtils -i https://mirrors.aliyun.com/pypi/simple

先把fastapi官网上那个例子改成用APIRouter的样子:

启动:

访问一下试试:

mysql数据库新建一个库表

因为现在需要一个能保存int值的,刚才那个不太行。。
CREATE TABLE `reqs` (`col1` int(10) NOT NULL, `col2` char(200) DEFAULT NULL);

 

参考ai的示例修改main.py、用DBUtils创建连接池

from typing import Union
from fastapi import FastAPI
from fastapi import APIRouter
import uvicorn
import pymysql
from dbutils.pooled_db import PooledDB# 创建连接池
pool = PooledDB(creator=pymysql,host='127.0.0.1',user='root',password='12345678',database='reqs',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor, autocommit=True,maxconnections=10
)def insert_data_using_pool(item_id: int, q: Union[str, None] = None):try:connection = pool.connection()with connection.cursor() as cursor:sql = "INSERT INTO reqs (col1, col2) VALUES (%s, %s)"cursor.execute(sql, (item_id, q))print("使用连接池插入记录成功")except pymysql.MySQLError as e:print(f"数据库错误:{e}")finally:if connection:connection.close()app = FastAPI()
router = APIRouter()# 定义了一个get接口,指定路径为/,当用户访问/的时候,FastAPI调用read_root函数
@router.get("/")
async def read_root():return {"Hello": "World"}@router.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):insert_data_using_pool(item_id, q)return {"item_id": item_id, "q": q}app.include_router(router, prefix="/api")if __name__ == "__main__":uvicorn.run(app="main:app", host='0.0.0.0', port=8000, reload=True)

打开服务,请求几次看效果:

看看库表和连接数:

别的不说,反正是入库成功了。这要是赶项目,这一块就可以过去了,大多数人都能懂哈。。不过,对我这个水平来说,我有种问号特别多还不知道咋表述的感觉,到这里曾经尝试参考ai的提示,打印连接池的连接数以及空闲连接数等,没学到任何东西,其过程让我想起来了这个图:

所以,我们还是去看看DBUtils的官方文档咋说。

# 看看DBUtils的官方文档咋说

https://pypi.org/project/DBUtils/看起来靠谱,页面这个样:

先看看我这是个啥版本,哦,就是最新的:

往下翻一下,看这里:

链接为https://webwareforpython.github.io/DBUtils/main.html,页面这个样:

因为咱们的示例在用PooledDb,所以直接去看这里了:

链接指向https://webwareforpython.github.io/DBUtils/main.html#pooleddb-pooled-db
 

既然链接都贴出来了,我还是学到啥就写啥了。
- pooled_db可以用来在不同的线程之间共享数据库连接,线程安全
- 创建连接池时,要给maxshared一个正数值
- 可以请求专用的连接(不一定要请求线程间共享的连接)
- mincached和maxcached设置的线程池,是预备给线程申请专用连接使用,或者“the pool of shared connections is not yet full”(用原文就是我还没大看明白)。。
 

接着看吧。。。

超链接指向https://webwareforpython.github.io/DBUtils/main.html#pooleddb-pooled-db-1

什么是DB-API 2

老遇见这个东西:DB-API 2 connection objects / DB-API 2 compliant database module
https://webwareforpython.github.io/DBUtils/main.html的页面往上翻,看到这个了:

链接指向:https://peps.python.org/pep-0249/

pymysql符合这个标准,就完了:

继续看PooledDB怎么用,示例过于简单了,基本等于没说,那就看看标准,就是链接https://peps.python.org/pep-0249/,这不就有东西嘛:

这里有更详细的说明,但没有示例。。。不过,还发现了这个:

写一段代码打出来后,这个样:

# 所以,我们现在可以参考的有

DBUtils包的文档

就是https://webwareforpython.github.io/DBUtils/main.html

help()方法打出的内容

DB-API 2标准的说明

就是https://peps.python.org/pep-0249/

ai给出的示例

我自己熟悉的某个私有项目

这个真的不能贴出来

哦,还可以参考pymysq的文档

https://pypi.org/project/PyMySQL/
这不就是个很好的示例么。。

算是有点儿收获了吧,起码找到了一堆资料,基本实现了0的突破,所以这个帖子到这里了,
AI老说with会自动回收连接资源,不用手动close,我这会儿准备考古一下去。

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

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

相关文章

嵌入式软件面经(一)Q: 什么是Modbus协议?它有哪些特点?

Modbus协议是一种开放式的工业通讯协议,最初由Modicon公司(现施耐德电气Schneider Electric)于1979年开发,广泛应用于工业现场设备之间的数据通讯,尤其适用于PLC(可编程逻辑控制器)与现场仪表、…

Java-52 深入浅出 Tomcat SSL工作原理 性能优化 参数配置 JVM优化

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月13日更新到: AI炼丹日志-29 - 字节…

day44-硬件学习之arm启动代码

一、跳转指令实现函数调用 LR(链接寄存器):保留函数返回地址 1.1 bl指令 跳转指令bl,使LR保存当前函数进入前的下一条指令的地址,使函数调用后可以返回下一条指令的地址; 1.2 bx指令 跳到目标地址; 1.3 栈…

【数据结构】七种常见排序算法

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 欢迎来到排序算法的学习,恭喜你!本期内容主要介绍排序算法,一起来探索吧~ &#xf…

Spring AOP 代理模式解析

一、核心概念:代理模式就像房屋中介 想象你要租一套房子: 你:租客(业务调用者)房东:房主(真实业务对象)中介:代理对象 传统方式(无代理) 租客…

智能制造——案例解读16页制造业指标体系搭建指导【附全文阅读】

文档的主要内容可以总结如下: **文档概述**: 本文档详细探讨了企业为何需要指标体系、指标体系的定义、如何搭建指标体系、如何有效拆解和管理指标,并最后提供了制造业指标体系的参考。 **主要内容**: 1. **企业为什么需要指标体系…

Pandas 数据清洗

数据清洗是数据分析过程中至关重要的一环,也是初学者最容易忽视的步骤。本文将详细介绍如何使用Pandas进行数据清洗,涵盖空值处理、日期格式修正、错误数据识别和重复数据删除四大核心内容。 1. Pandas 清洗空值 空值是数据集中最常见的问题之一&#…

C++容器之 forward_list (单向链表)使用说明

目录 1. 语法格式 2. 说明 3. 用法示例 1. 语法格式 描述控制可变长度元素序列的对象。该序列存储为单向(前向)链接的节点列表&#xff0c;每个节点包含一个 Type 类型的成员。 template <class Type, class Allocator allocator<Type>> class forward_lis…

ali 轻量服务器安装nginx

# Ubuntu sudo apt install nginx-light # 精简版 # CentOS sudo yum install nginx #启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx #验证安装 nginx -v curl -I 127.0.0.1 #常用命令&#xff1a; # 重新加载配…

【设计模式】4.代理模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 代理模式 1. 第一版 class SchoolGirl:def __init__(self):self._name Nonepropertydef name(self):return self._namename.setterdef name(self, valu…

基于微信小程序的美食点餐订餐系统

文章目录 1. 项目概述2. 项目思维导图3. 系统架构特点4. 核心模块实现代码1. 登录注册2. 首页模块实现4. 分类模块实现5. 购物车模块实现6. 订单模块实现 5. 注意事项6. 项目效果截图7. 关于作者其它项目视频教程介绍 1. 项目概述 在移动互联网时代&#xff0c;餐饮行业数字化…

[neo4j]介绍4个开源的知识图谱项目

项目主要介绍几个开源项目&#xff1a; QASystemOnMedicalKG&#xff1a;医疗知识图谱问答 https://github.com/liuhuanyong/QASystemOnMedicalKG Agriculture_KnowledgeGraph&#xff1a;农业知识图谱 Financial-Knowledge-Graphs&#xff1a;小型金融知识图谱 stock-know…

20倍光学镜头怎么实现20+20倍数实现

1. 硬件选择 球机摄像头 选择40倍光学变焦的摄像头 &#xff1a;确保摄像头具有足够的变焦能力&#xff0c;同时考虑摄像头的分辨率、帧率、夜视功能等。 内置云台 &#xff1a;许多高端摄像头已经内置了云台功能&#xff0c;如果是这样&#xff0c;可以简化机械设计和电机控制…

Axios 在 Vue3 项目中的使用:从安装到组件中的使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

【Python打卡Day50】预训练模型与CBAM注意力@浙大疏锦行

现在我们思考下&#xff0c;是否可以对于预训练模型增加模块来优化其效果&#xff0c;这里我们会遇到一个问题: 预训练模型的结构和权重是固定的&#xff0c;如果修改其中的模型结构&#xff0c;是否会大幅影响其性能。其次是训练的时候如何训练才可以更好的避免破坏原有的特征…

ONLYOFFICE Jira 集成应用程序 4.0.0 发布,含新的文件格式支持等多个重大更新!

ONLYOFFICE 与 Jira 集成的重大更新现已发布&#xff01;使用 ONLYOFFICE Docs 在 Jira Software 中处理各种办公文档&#xff0c;从 4.0.0 版本开始&#xff0c;ONLYOFFICE 连接器允许您编辑 PDF 文件和表单、直接从编辑器创建新文件、可视化用户头像、在 Jira 平台内处理新文…

安装区块链相关Geth(基于CentOS7)

注&#xff1a;由于版本冲突问题&#xff0c;请严格按如下介绍版本进行安装 安装所需资料&#xff1a;通过网盘分享的文件&#xff1a;区块链_CSDN 链接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwdzgzs 提取码: zgzs --来自百度网盘超级会员v6的分享 一、安装运…

系统分析师——计算机系统基础

系统分析师——计算机系统基础 引言 作为系统分析师学习的第一节课&#xff0c;计算机系统基础部分构建了整个知识体系的核心框架。本文将围绕计算机系统的层次结构、硬件组成、软件分类以及关键技术点进行详细总结&#xff0c;为后续深入学习奠定基础。 本节学习内容如下图&…

JS常用设计模式汇总

1、基于类的单例模式 // PageManager.js class PageManager {constructor(config) {if (!PageManager.instance) {this.config config;this.initialized false;PageManager.instance this;this.init();}return PageManager.instance;}init() {if (this.initialized) return…

迈向软件开发 T 型人才之路:构建多元能力体系

在软件开发的广袤天地里&#xff0c;T 型人才备受瞩目。这类人才犹如具备强大能量的 “多面手”&#xff0c;既有深入专精的技术能力&#xff0c;又有广泛多元的知识与技能储备&#xff0c;能够从容应对复杂多变的项目需求&#xff0c;引领行业创新发展。于当今社会而言&#x…