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

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 本身不支持连接池,但你可以使用其他第三方库来实现连接池,如 DBUtilsSQLAlchemy

例如,使用 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++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…...

Linux应用开发————mysql数据库

数据库概述 什么是数据库(database)? 数据库是一种数据管理的管理软件&#xff0c;它的作用是为了有效管理数据&#xff0c;形成一个尽可能无几余的数据集合&#xff0c;并能提供接口&#xff0c;方便用户使用。 数据库能用来干什么? 顾名思义&#xff0c;仓库就是用来保存东…...

4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅]

4_使用 HTML5 Canvas API (3) --[HTML5 API 学习之旅] 1.缩放 canvas 对象 在 <canvas> 中缩放对象可以通过 scale 方法来实现。这个方法会根据提供的参数对之后绘制的所有内容进行缩放。下面是两个具体的示例&#xff0c;展示如何使用 scale 方法来缩放 canvas 上的对…...

docker build次数过多,导致磁盘内存不足:ERROR: no space left on device

在使用 docker build 构建镜像时&#xff0c;Docker 会创建一个临时的构建上下文&#xff0c;生成镜像的过程中会产生多个中间层。这些文件和层会占用磁盘空间。构建完成后&#xff0c;如果你没有清理这些不再使用的中间层和临时文件&#xff0c;可能会导致磁盘空间不足。 常见…...

LDO和DC-DC的区别、DCDC和LDO主要指标

LDO和DC-DC的区别 LDO外围器件少&#xff0c;电路简单&#xff0c;成本低&#xff1b;DC-DC外围器件多&#xff0c;电路复杂&#xff0c;成本高&#xff1b; LDO负载响应快&#xff0c;输出纹波小&#xff1b;DC-DC负载响应比LDO慢&#xff0c;输出纹波大&#xff1b; 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&#xff08;Real Time Messaging Protocol&#xff09; 简介&#xff1a;RTMP是由Adobe公司开发的实时消息传输协议&#xff0c;主要用于流媒体数据的传输。它基于TCP传输&#xff0c;具有低延迟、高可靠性的特点。特点&#xff1a;RTMP支持多种视…...

力扣-图论-15【算法学习day.65】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

“AI智慧数字孪生系统:开启智能新纪元

嘿&#xff0c;大家好&#xff01;今天我想和大家聊聊一个特别酷炫的话题——AI智慧数字孪生系统。这可是个新鲜玩意儿&#xff0c;可能有些朋友还不太了解&#xff0c;别急&#xff0c;我来慢慢道来。 首先&#xff0c;啥叫数字孪生呢&#xff1f;简单来说&#xff0c;就是给现…...

54、库卡机器人轴的软限位设置

步骤1&#xff1a;将用户组改为“专家”。 步骤2&#xff1a;点击“投入运行”----“售后服务”-----“软件限位开关” 步骤3&#xff1a;就可以针对每个轴修改对应的角度值&#xff0c;然后点击“保存”。...

基于MATLAB 的数字图像处理技术总结

大家好&#xff01;欢迎来到本次的总结性的一篇文章&#xff0c;因为咸鱼哥这几个月是真的有点小忙&#xff08;参加了点小比赛&#xff0c;准备考试等等&#xff09;所以&#xff0c;在数字图像学习后&#xff0c;我来写一个总结性的文章&#xff0c;同时帮助大家学习&#xf…...

Android运行低版本项目可能遇到的问题

Android运行低版本项目可能遇到的问题 低版本项目总是遇到各种问题的&#xff0c;耐心点 一、gradle-xxx.xxx.xxx.zip一直下载不下来 在gradle-wrapper.properties可以试下 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists zipStoreBaseGRADLE_USER_HOME …...

window.getSelection() 获取划线内容并实现 dom 追随功能

功能&#xff1a;鼠标对一段文本中某些文字进行划线之后&#xff0c;需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作&#xff0c;比如收藏、添加样本库等功能。 一、需要了解的鼠标事件对象属性 给 dom 元素注册鼠标事件之后&#xff0c;会有 event 属性&#…...

【人工智能】基于Python的自然语言处理:深入实现文本相似度计算

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 文本相似度计算是自然语言处理(NLP)中的核心任务,广泛应用于搜索引擎、推荐系统、问答系统等领域。本文全面解析文本相似度计算的核心技术,使用Python中的spaCy和sentence-transformers库实现多种方法,包括基…...

布局、组成部分

布局 线性布局 (Row/Column) 线性容器Row和Column构建&#xff0c;Column容器内子元素按照垂直方向排列&#xff0c;Row容器内子元素按照水平方向排列。 在布局容器内&#xff0c;可以通过space属性设置排列方向上子元素的间距&#xff0c;使各子元素在排列方向上有等间距效…...

Go, Jocko, Kafka

本篇内容是根据2016年8月份# 31. Go, Jocko, Kafka 音频录制内容的整理与翻译 Travis Jeffery 参加了节目&#xff0c;谈论 Go、Jocko、Kafka、Kafka 的存储内部结构如何工作&#xff0c;以及有趣的 Go 项目和新闻。 Erik St. Martin: 大家好&#xff0c;欢迎回到《GoTime》的另…...

CANoe 报文仿真

文章目录 一、单个/少数报文仿真1、Canoe 发送报文2、可以自定义该报文发送节点3、添加报文4、触发方式 二、ECU节点仿真1、导入DBC&#xff0c;添加节点2. 选择节点中的哪些报文可以发送3. 更新ECU 节点发送的报文数据 三、开始仿真激活/失效该 ECU节点 一、单个/少数报文仿真…...

升级thinkphp8最新版本,升级后发现版本不变

升级thinkphp8.0.3最新版本8.1.1&#xff0c;升级后发现版本不变&#xff0c; 更新TP有两个方法 1 全部更新(所有插件都一起更新) composer update 2 只更新TP框架核心 composer update topthink/framework 造成可能有两个原因&#xff0c;一是缓存问题&#xff0c;二是更新…...

工业大数据分析算法实战-day07

文章目录 day07概率图模型朴素贝叶斯&#xff08;Naive Bayes&#xff09;贝叶斯网络&#xff08;Bayesian Network&#xff09;一般图模型生成式和判别式模型图模型结构与模型推理 集成学习Boosting算法Stacking算法 day07 今天是第七天&#xff0c;昨日主要针对是第三章节中…...

六、nginx负载均衡

负载均衡&#xff1a;将四层或者七层的请求分配到多台后端的服务器上。 从而分担整个业务的负载。提高系统的稳定性&#xff0c;也可以提高高可用&#xff08;备灾&#xff0c;其中一台后端服务器如果发生故障不影响整体业务&#xff09;. 负载均衡的算法 round robin 轮询 r…...

鸿蒙项目云捐助第十一讲鸿蒙App应用的捐助成功自定义对话框组件实现

在生活中&#xff0c;用户做了一个好事后&#xff0c;很多场合都会收到一份感谢。在捐助的行业也是一样的&#xff0c;用户捐出了一片爱心&#xff0c;就会收获一份温情。这里的温情是通过自定义对话框实现的。 一、通过自定义对话框组件实现捐款成功的信息页 这里用户捐款成…...

华为云联合中国信通院发布首个云计算智能化可观测性能力成熟度模型标准

2024年12月3日&#xff0c;由全球数字经济大会组委会主办&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国通信企业协会承办的2024全球数字经济大会云AI计算国际合作论坛在北京成功召开。本次会议中&#xff0c;华为云联合中国信通院等单位…...

如何评估呼叫中心大模型呼出机器人的使用效果?

如何评估呼叫中心大模型呼出机器人的使用效果&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 评估呼叫中心大模型呼出机器人的使用效果是一个复杂而多维的过程&#xff0c;需要综合考虑多个方面&…...

ARM/Linux嵌入式面经(六一):联合汽车电子

1、自我介绍 2、介绍一下 ARM与RISCV的差异 在嵌入式系统领域,ARM与RISC-V是两种重要的指令集架构(ISA),它们各自具有独特的特点和优势。以下是对两者差异的详细介绍: ARM与RISC-V的差异 开源性与专有性: ARM:ARM架构是商业化的,任何想要使用ARM指令集或相关技术的设…...

unity 雷达

unity 雷达 首先去商店下载TouchScript插件 导入的时候勾选Enable TUIO 然后把预制体Cursors和TouchManager拖上 最后把TuioInput这个脚本挂上 脚本上的端口号尽量不改...

单元测试知识总结

我们希望每段代码都是自测试的&#xff0c;每次改动之后&#xff0c;都能自动发现对现有功能的影响。 1 测试要求 在对软件单元进行动态测试之前&#xff0c;应对软件单元的源代码进行静态测试&#xff1b; 应建立测试软件单元的环境&#xff0c;如数据准备、桩模块、模拟器…...

Android:使用Service处理息屏后的WebSocket的服务端推送消息并传递给前端

前言 之前我们在使 RESTful 访问服务端时&#xff0c;一般都是客户端请求服务端应答的方式&#xff0c;这种通讯方式&#xff0c;对于需要持续获取数据的情形都是采用轮询的方式&#xff0c;但是这种方式对两边的性能消耗很大&#xff0c;特别是服务端的压力很大。现在当我们使…...

Git Bash Here 中文显示乱码的处理方法

在使用"open Git Bash Here"时&#xff0c;遇到中文显示乱码问题。 原因&#xff1a;通常是由于编码设置不正确导致的。 open Git Bash Here —>鼠标右击空白处&#xff0c;点击「选项」|或「Options」 在「文本」或 「Text」选项卡中&#xff0c;找到"local…...

FreeBSD安装教程

FreeBSD 是一个功能强大且可靠的开源 UNIX 操作系统&#xff0c;适合服务器和桌面环境。本文将介绍如何安装 FreeBSD&#xff0c;从系统准备到基础设置&#xff0c;为你快速上手提供帮助。 一、准备工作 1. 硬件要求 CPU&#xff1a;支持 x86 或 AMD64 架构的处理器。 内存&a…...