Python对MYSQL进行统一管理

背景

在现代 Web 应用程序中,数据库是存储和管理数据的核心组件。Python 提供了多种库来与 MySQL 数据库进行交互,其中最常用的包括 pymysql 和 Flask-SQLAlchemy。pymysql 是一个纯 Python 实现的 MySQL 客户端,而 Flask-SQLAlchemy 是 Flask 的一个扩展,提供了更高级的 ORM(对象关系映射)功能。本文将比较这两者的区别,并提供使用示例,以帮助开发者选择合适的工具进行数据库管理。

pymysql

pymysql 是一个轻量级的 MySQL 客户端,适合简单的数据库操作。使用 pymysql 时,您需要手动管理数据库连接。每次需要与数据库交互时,您都需要调用 pymysql.connect() 来创建一个新的数据库连接,并在完成操作后手动关闭连接。这种方式虽然简单,但在高并发的应用中,频繁的连接和断开会导致性能下降。

在事务管理方面,pymysql 需要您手动管理事务的提交和回滚。您需要在执行完 SQL 操作后调用 connection.commit() 来提交事务,或者在发生错误时调用 connection.rollback() 来回滚事务。这种手动管理的方式容易出错,尤其是在复杂的操作中。

pymysql 不支持 ORM,所有操作都需要使用原始 SQL 查询。您需要手动编写 SQL 语句,并处理结果集。这对于简单的查询是可行的,但在处理复杂数据模型时,代码会变得冗长且难以维护。

Flask-SQLAlchemy

Flask-SQLAlchemy 是 Flask 的一个扩展,提供了更高级的数据库管理功能。与 pymysql 不同,Flask-SQLAlchemy 使用连接池来自动管理数据库连接。应用启动时,连接池会创建一定数量的连接,并在需要时重用这些连接。这种方式显著提高了性能,尤其是在高并发的 Web 应用中。

在事务管理方面,Flask-SQLAlchemy 使用 db.session 来管理事务。您不需要手动提交或回滚事务,Flask-SQLAlchemy 会自动处理这些操作。通过上下文管理器,您可以轻松地管理会话的生命周期,确保在请求结束时自动关闭连接。

Flask-SQLAlchemy 支持 ORM,允许您使用 Python 类来表示数据库表。您可以通过对象操作数据库,简化数据操作。这使得代码更加简洁,易于维护,特别是在处理复杂数据模型时。

比较两者的区别

特性 pymysql Flask-SQLAlchemy 
连接管理手动管理连接的创建和关闭。每次需要连接时都要调用 pymysql.connect()。自动管理连接,使用连接池来重用连接。
事务管理 需要手动管理事务的提交和回滚。自动处理事务,使用 db.session 进行管理。
ORM 支持不支持 ORM,使用原始 SQL 查询。支持 ORM,允许使用 Python 类来表示数据库表。
代码简洁性代码较为冗长,需要手动处理连接和游标。代码简洁,使用模型类和查询接口。
适用场景适合简单的数据库操作和小型项目。适合复杂的 Web 应用和需要频繁数据库交互的项目。

使用示例

1. 使用 pymysql

pymysql 是一个轻量级的 MySQL 客户端,适合简单的数据库操作。以下是一个使用 pymysql 的示例:

import pymysql# 数据库连接参数
config = {'host': 'localhost','user': 'admin','password': 'admin123','db': 'test','charset': 'utf8',
}# 创建连接
connection = pymysql.connect(**config)try:with connection.cursor() as cursor:# 执行 SQL 查询sql = "SELECT * FROM knowledge_file"cursor.execute(sql)result = cursor.fetchall()print(result)
finally:# 关闭连接connection.close()

2. 使用 Flask-SQLAlchemy

Flask-SQLAlchemy 是 Flask 的一个扩展,提供了更高级的数据库管理功能。以下是一个使用 Flask-SQLAlchemy 的示例:

from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
import pymysql# 安装 pymysql 作为 MySQLdb
pymysql.install_as_MySQLdb()# 创建 Flask 应用
app = Flask(__name__)# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://admin:admin123@localhost/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False# 初始化 SQLAlchemy
db = SQLAlchemy(app)# 定义数据库模型
class KnowledgeFile(db.Model):__tablename__ = 'knowledge_file'id = db.Column(db.Integer, primary_key=True)file_name = db.Column(db.String(255))@app.route('/api/test', methods=['GET'])
def test():try:# 使用 SQLAlchemy 的会话files = KnowledgeFile.query.all()  # 查询所有记录return jsonify({"data": [file.file_name for file in files], "status": 200})except Exception as e:return jsonify({"error": str(e), "status": 500})# 启动 Flask 应用
if __name__ == '__main__':app.run(debug=True)

总结

在选择使用 pymysql 还是 Flask-SQLAlchemy 时,开发者应根据项目的复杂性和需求进行权衡。对于简单的数据库操作,pymysql 是一个轻量级的选择;而对于需要频繁与数据库交互的复杂 Web 应用,Flask-SQLAlchemy 提供了更强大的功能和更简洁的代码结构。通过本文的比较和示例,希望能帮助您更好地理解这两种工具的使用场景和优势。

为了不要出现以下错误,大家还是统一化管理趴

pymysql.err.OperationalError: (1040, 'ny connections')

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

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

相关文章

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者…

Win10系统Docker+DeepSeek+ragflow搭建本地知识库

文章目录 1、安装ollama1.1 下载1.2 安装1.3 cmd命令行测试安装成功1.4 拉取模型2、安装ragflow2.1 下载项目2.2 通过docker拉取镜像安装2.3 查看docker日志是否安装成功3、模型配置3.1 第一次登录需要注册3.2 模型添加4、知识库配置4.1 创建知识库4.2 上传文档4.3 解析5、聊天…

redis的应用,缓存,分布式锁

1.应用 1.1可以用作缓存 作用:提交数据的查询效率,减少对数据库的访问频率 什么数据适合放入缓存 1.查询频率高,修改频率低 2.对安全系数比较低 如何实现 Service public class DeptServer {Autowiredprivate DeptMapper deptMapper;Auto…

springboot整合 xxl-job

文章目录 一、xxl-job是什么二、使用步骤 1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功3. 配置执行器【在自己的springboot项目中配置】4. 在页面上创建执行器和任务,与项目中绑定 总结参考 一、xxl-job是什么 XXL-JOB 是一个分布式任务调…

Jenkins 环境搭建---基于 Docker

前期准备 提前安装jdk、maven、nodeJs(如果需要的话) 创建 jenkins 环境目录,用来当做挂载卷 /data/jenkins/ 一:拉取 Jenkins 镜像 docker pull jenkins/jenkins:lts 二:设置 Jenkins挂载目录 mkdir -p ~/jen…

小米路由器 AX3000T 降级后无法正常使用,解决办法

问题描述 买了个 AX3000T 路由器,想安装 OpenWRT 或者 安装 Clash 使用,看教程说是需要降级到 v1.0.47 版本。 结果刷机之后路由器无法打开了,一直黄灯亮,中间灭一下,又是黄灯长亮,没有 WIFI 没有连接。以…

金融学-金融机构

前言 金融机构在金融体系运行体系运营中起着不可获缺的关键作用.如规则的制定与监管-中央银行,体系的运营证券公司,体系的供贷的参与者金融中介.本章将用一种说明我们的金融体系是怎样改进经济效率的经济分析,来讲述相关金融机构 金融结构的经济学分析 世界各国的金融体系在…

公网远程家里局域网电脑过程详细记录,包含设置路由器。

由于从校内迁居小区,校内需要远程控制访问小区内个人电脑,于是早些时间刚好自己是电信宽带,可以申请公网ipv4不需要花钱,所以就打电话直接申请即可,申请成功后访问光猫设备管理界面192.168.1.1,输入用户名密码登录超管(密码是网上查下就有了)设置了光猫为桥接模式,然后…

002 SpringCloudAlibaba整合 - Feign远程调用、Loadbalancer负载均衡

前文地址: 001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控 文章目录 8.Feign远程调用、loadbalancer负载均衡整合1.OpenFeign整合1.引入依赖2.启动类添加EnableFeignClients注解3.yml配置4.日志配置5.远程调用测试6.服务…

基于javaweb的SpringBoot校园二手商品系统设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

国产开源PDF解析工具MinerU

前言 PDF的数据解析是一件较困难的事情,几乎所有商家都把PDF转WORD功能做成付费产品。 PDF是基于PostScript子集渲染的,PostScript是一门图灵完备的语言。而WORD需要的渲染,本质上是PDF能力的子集。大模型领域,我们的目标文件格…

stm32单片机个人学习笔记16(SPI通信协议)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例

1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…

Ubuntu 的RabbitMQ安装

目录 1.安装Erlang 查看erlang版本 退出命令 2. 安装 RabbitMQ 3.确认安装结果 4.安装RabbitMQ管理界面 5.启动服务并访问 1.启动服务 2.查看服务状态 3.通过IP:port 访问界面 4.添加管理员用户 a)添加用户名:admin,密码&#xff1…

Powershell Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能,可以与用户进行自然语言交互,回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括: 强大的语言理解能力:能够理解和生成自然语言,与用户进行流畅的对话。多领域知识&…

VS Code 如何搭建C/C++开发环境

目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…

vue从入门到精通(十一):条件渲染

条件渲染 1.v-if 写法: (1).v-if“表达式” (2).v-else-if“表达式” (3).v-else“表达式” 适用于:切换频率较低的场景。 特点:不展示的DOM元素直接被移除。 注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断” 2.v-show 写法:v-show“…

Java之——“String类”(内容较多,结合目录察看分类)

前言 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面向对象的思想,而字符串应用又…

【C++篇】树影摇曳,旋转无声:探寻AVL树的平衡之道

文章目录 从结构到操作:手撕AVL树的实现一、AVL树介绍1.1 什么是AVL树1.2 平衡因子的定义1.3 平衡的意义1.4 AVL树的操作 二、AVL树的节点结构2.1 节点结构的定义: 三、插入操作3.1 插入操作概述3.2 步骤1:按二叉查找树规则插入节点3.3 步骤2…

限制Doris端口访问,解决REST API漏洞

方案一:通过Linux防火墙规则限制 目标:限制Doris的端口,只允许指定的ip访问此端口,其他禁止 1、设置规则 1.1、准备工作 注意:以上命令顺序不能错,先禁止后允许,另外此处只是临时设置。 # …