pymysql 入门
发现宝藏
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。
1. 什么是 PyMySQL?
PyMySQL 是一个纯 Python 编写的 MySQL 客户端库,可以通过它轻松地在 Python 中连接并操作 MySQL 数据库。它兼容 MySQL 5.x 和 MariaDB,并且与 MySQL 官方提供的客户端接口(C API)兼容。PyMySQL 支持数据库连接、执行 SQL 查询、以及提取查询结果等功能。
1.1 为什么选择 PyMySQL?
- 纯 Python 实现:没有 C 扩展,安装起来更加简单,兼容性更好。
- 易用性:与 MySQL 数据库的交互非常直观。
- 支持 Python3:在 Python3 环境中运行非常流畅。
2. 安装 PyMySQL
PyMySQL 可以通过 Python 的包管理工具 pip 进行安装。打开终端或命令提示符,输入以下命令:
pip install pymysql
安装完成后,你就可以在你的 Python 项目中使用 PyMySQL 了。
3. 连接 MySQL 数据库
要使用 PyMySQL 连接到 MySQL 数据库,你需要提供 MySQL 服务的主机地址、用户名、密码和数据库名等信息。以下是一个连接的简单示例:
import pymysql# 连接到数据库
connection = pymysql.connect(host='localhost', # MySQL 服务器地址,localhost 表示本地user='root', # 数据库用户名password='password123', # 数据库密码database='test_db', # 要连接的数据库名称charset='utf8mb4' # 字符集(推荐使用 utf8mb4)
)# 确保连接成功
print("Connected to MySQL Database!")
3.1连接参数详解:
host:MySQL 服务器的地址,通常是'localhost'或 IP 地址。如果是远程服务器,则需要填写远程服务器的 IP。user:连接 MySQL 数据库的用户名。password:连接数据库的密码。database:指定要操作的数据库。charset:字符集,utf8mb4是推荐的字符集,支持更多的 Unicode 字符。
4. 执行查询操作
4.1 SELECT 查询
查询数据库通常使用 SELECT 语句。下面是如何在 Python 中执行查询操作并处理返回结果的示例:
# 创建一个游标对象
cursor = connection.cursor()# 执行 SELECT 查询
cursor.execute("SELECT * FROM users")# 获取所有结果
results = cursor.fetchall()# 遍历并打印每一行数据
for row in results:print(row)# 关闭游标
cursor.close()
cursor.execute():执行 SQL 语句。cursor.fetchall():获取查询结果的所有记录,返回一个列表,每个元素是数据库表中的一行。
如果只想获取单条记录,可以使用 fetchone() 方法:
cursor.execute("SELECT * FROM users LIMIT 1")
single_row = cursor.fetchone()
print(single_row)
4.2 INSERT 操作
插入数据时,我们使用 INSERT INTO 语句。例如:
cursor = connection.cursor()# 插入一条数据
sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
values = ('Alice', 28, 'alice@example.com')cursor.execute(sql, values)# 提交事务
connection.commit()print("Record inserted successfully!")# 关闭游标
cursor.close()
cursor.execute(sql, values):执行插入操作,其中%s是占位符,values是一个元组或列表,包含实际的插入值。connection.commit():提交事务,确保数据写入数据库。
4.3 UPDATE 操作
更新数据时,我们使用 UPDATE 语句。例如:
cursor = connection.cursor()# 更新一条数据
sql = "UPDATE users SET age = %s WHERE name = %s"
values = (30, 'Alice')cursor.execute(sql, values)# 提交事务
connection.commit()print("Record updated successfully!")# 关闭游标
cursor.close()
4.4 DELETE 操作
删除数据时,我们使用 DELETE FROM 语句。例如:
cursor = connection.cursor()# 删除一条数据
sql = "DELETE FROM users WHERE name = %s"
value = ('Alice',)cursor.execute(sql, value)# 提交事务
connection.commit()print("Record deleted successfully!")# 关闭游标
cursor.close()
5. 处理数据库事务
数据库操作可以使用事务来管理。在 PyMySQL 中,默认情况下,数据库操作是自动提交的,但我们可以通过显式地调用 commit() 来提交事务,或者使用 rollback() 来回滚事务。
try:cursor = connection.cursor()# 执行一些数据库操作cursor.execute("UPDATE users SET age = 30 WHERE name = 'Alice'")# 如果没有错误,提交事务connection.commit()except Exception as e:# 出现错误时回滚事务print(f"Error occurred: {e}")connection.rollback()finally:cursor.close()
6. 使用游标(Cursor)和提取结果
游标是用于执行 SQL 语句并获取结果的对象。在 PyMySQL 中,我们通常使用游标来执行查询和数据操作。游标提供了如下几种常用方法:
fetchall():返回所有查询结果。fetchone():返回查询结果中的第一条记录。fetchmany(size):返回查询结果中的多条记录,size是返回的条数。
7. 如何使用连接池管理多个数据库连接
对于高并发的应用程序,管理数据库连接池是非常重要的。PyMySQL 本身不支持连接池,但你可以使用其他第三方库来实现连接池,如 DBUtils 或 SQLAlchemy。
例如,使用 DBUtils 创建连接池:
from dbutils.pooled_db import PooledDB
import pymysql# 创建连接池
pool = PooledDB(creator=pymysql, # 使用 pymysql 作为数据库接口maxconnections=5, # 连接池允许的最大连接数host='localhost',user='root',password='password123',database='test_db',charset='utf8mb4'
)# 从连接池获取连接
connection = pool.connection()# 执行数据库操作
cursor = connection.cursor()
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
print(result)# 关闭游标和连接
cursor.close()
connection.close()
8. 异常处理
在数据库操作中,捕获和处理异常非常重要。例如,尝试执行一个 SQL 语句时可能会出现数据库连接失败、SQL 错误等问题。你可以使用 try/except 来捕获这些异常。
try:connection = pymysql.connect(host='localhost',user='root',password='wrongpassword',database='test_db')
except pymysql.MySQLError as e:print(f"Error connecting to MySQL: {e}")
9. 常见问题解答
9.1. 为什么我的 PyMySQL 连接报错?
- 确保数据库用户名、密码、数据库名、主机地址正确。
- 检查 MySQL 服务是否已启动。
- 确保防火墙未阻止 MySQL 连接。
9.2. 如何提高查询性能?
- 使用索引优化查询。
- 避免 SELECT *,只查询需要的字段。
- 分页查询,避免一次性返回大量数据。
相关文章:
pymysql 入门
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 1. 什么是 PyMySQL? PyMySQL 是一个纯 Python 编写的 MySQL 客户端库,可以通过它轻松地在 Python 中连…...
Leecode刷题C++之形成目标字符串需要的最少字符串数①
执行结果:通过 执行用时和内存消耗如下: 代码如下: class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…...
Linux应用开发————mysql数据库
数据库概述 什么是数据库(database)? 数据库是一种数据管理的管理软件,它的作用是为了有效管理数据,形成一个尽可能无几余的数据集合,并能提供接口,方便用户使用。 数据库能用来干什么? 顾名思义,仓库就是用来保存东…...
4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅]
4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅] 1.缩放 canvas 对象 在 <canvas> 中缩放对象可以通过 scale 方法来实现。这个方法会根据提供的参数对之后绘制的所有内容进行缩放。下面是两个具体的示例,展示如何使用 scale 方法来缩放 canvas 上的对…...
docker build次数过多,导致磁盘内存不足:ERROR: no space left on device
在使用 docker build 构建镜像时,Docker 会创建一个临时的构建上下文,生成镜像的过程中会产生多个中间层。这些文件和层会占用磁盘空间。构建完成后,如果你没有清理这些不再使用的中间层和临时文件,可能会导致磁盘空间不足。 常见…...
LDO和DC-DC的区别、DCDC和LDO主要指标
LDO和DC-DC的区别 LDO外围器件少,电路简单,成本低;DC-DC外围器件多,电路复杂,成本高; LDO负载响应快,输出纹波小;DC-DC负载响应比LDO慢,输出纹波大; LDO效…...
LeetCode hot100-81
https://leetcode.cn/problems/climbing-stairs/description/?envTypestudy-plan-v2&envIdtop-100-liked 70. 爬楼梯 已解答 简单 相关标签 相关企业 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&…...
RTMP、RTSP、RTP、HLS、MPEG-DASH协议的简介,以及应用场景
实时视频传输协议 1. RTMP(Real Time Messaging Protocol) 简介:RTMP是由Adobe公司开发的实时消息传输协议,主要用于流媒体数据的传输。它基于TCP传输,具有低延迟、高可靠性的特点。特点:RTMP支持多种视…...
力扣-图论-15【算法学习day.65】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
“AI智慧数字孪生系统:开启智能新纪元
嘿,大家好!今天我想和大家聊聊一个特别酷炫的话题——AI智慧数字孪生系统。这可是个新鲜玩意儿,可能有些朋友还不太了解,别急,我来慢慢道来。 首先,啥叫数字孪生呢?简单来说,就是给现…...
54、库卡机器人轴的软限位设置
步骤1:将用户组改为“专家”。 步骤2:点击“投入运行”----“售后服务”-----“软件限位开关” 步骤3:就可以针对每个轴修改对应的角度值,然后点击“保存”。...
基于MATLAB 的数字图像处理技术总结
大家好!欢迎来到本次的总结性的一篇文章,因为咸鱼哥这几个月是真的有点小忙(参加了点小比赛,准备考试等等)所以,在数字图像学习后,我来写一个总结性的文章,同时帮助大家学习…...
Android运行低版本项目可能遇到的问题
Android运行低版本项目可能遇到的问题 低版本项目总是遇到各种问题的,耐心点 一、gradle-xxx.xxx.xxx.zip一直下载不下来 在gradle-wrapper.properties可以试下 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists zipStoreBaseGRADLE_USER_HOME …...
window.getSelection() 获取划线内容并实现 dom 追随功能
功能:鼠标对一段文本中某些文字进行划线之后,需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作,比如收藏、添加样本库等功能。 一、需要了解的鼠标事件对象属性 给 dom 元素注册鼠标事件之后,会有 event 属性&#…...
【人工智能】基于Python的自然语言处理:深入实现文本相似度计算
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 文本相似度计算是自然语言处理(NLP)中的核心任务,广泛应用于搜索引擎、推荐系统、问答系统等领域。本文全面解析文本相似度计算的核心技术,使用Python中的spaCy和sentence-transformers库实现多种方法,包括基…...
布局、组成部分
布局 线性布局 (Row/Column) 线性容器Row和Column构建,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。 在布局容器内,可以通过space属性设置排列方向上子元素的间距,使各子元素在排列方向上有等间距效…...
Go, Jocko, Kafka
本篇内容是根据2016年8月份# 31. Go, Jocko, Kafka 音频录制内容的整理与翻译 Travis Jeffery 参加了节目,谈论 Go、Jocko、Kafka、Kafka 的存储内部结构如何工作,以及有趣的 Go 项目和新闻。 Erik St. Martin: 大家好,欢迎回到《GoTime》的另…...
CANoe 报文仿真
文章目录 一、单个/少数报文仿真1、Canoe 发送报文2、可以自定义该报文发送节点3、添加报文4、触发方式 二、ECU节点仿真1、导入DBC,添加节点2. 选择节点中的哪些报文可以发送3. 更新ECU 节点发送的报文数据 三、开始仿真激活/失效该 ECU节点 一、单个/少数报文仿真…...
升级thinkphp8最新版本,升级后发现版本不变
升级thinkphp8.0.3最新版本8.1.1,升级后发现版本不变, 更新TP有两个方法 1 全部更新(所有插件都一起更新) composer update 2 只更新TP框架核心 composer update topthink/framework 造成可能有两个原因,一是缓存问题,二是更新…...
工业大数据分析算法实战-day07
文章目录 day07概率图模型朴素贝叶斯(Naive Bayes)贝叶斯网络(Bayesian Network)一般图模型生成式和判别式模型图模型结构与模型推理 集成学习Boosting算法Stacking算法 day07 今天是第七天,昨日主要针对是第三章节中…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
