【超详细教程】Python 连接 MySQL 全流程实战

【超详细教程】Python 连接 MySQL 全流程实战

在 Python 开发中,数据库基本是绕不开的核心环节,而 MySQL + PyMySQL 是最常见、最稳定、最轻量的组合。
很多同学在刚开始连接数据库时,经常会遇到连不上、编码错误、游标报错等问题。

这篇文章我会用非常清晰的方式带你完成:

  • PyMySQL 安装
  • 数据库连接参数配置
  • 创建连接对象
  • 创建游标对象
  • 执行 SQL 查询
  • 执行插入语句
  • 完整代码可直接运行

内容全部来自实战总结,照着敲你就能用!


⭐ 一、安装 PyMySQL

PyMySQL 是 Python 中用于连接 MySQL 的轻量级库,安装方式非常简单:

pip install pymysql 

安装完成后我们就可以在项目中使用它进行数据库操作。


⭐ 二、准备数据库连接配置

连接 MySQL 需要提供登录信息,我们通常将参数写成一个字典,方便管理:

import pymysql db_confing ={'host':'127.0.0.1',# 服务器地址'port':3306,# MySQL 端口'user':'root',# 用户名'password':'root',# 密码'db':'wp',# 需要连接的数据库'charset':'utf8',# 字符编码}

⚠ 这些参数必须真实存在,否则连接会失败。


⭐ 三、建立数据库连接

PyMySQL 最核心的一句代码:

数据库对象 = pymysql.connect(**db_confing)print(数据库对象)

这里使用 **db_confing 是 Python 字典解包语法,等同于:

host='127.0.0.1', port=3306, user='root' ... 

执行后会得到类似:

<pymysql.connections.Connection object at 0xxx> 

代表连接成功。


⭐ 四、创建游标对象(Cursor)

游标对象用来 执行 SQL接收查询结果

游标对象 = 数据库对象.cursor()print(游标对象)

每一次查询、插入,都必须通过游标来完成。


⭐ 五、执行 SQL 查询(SELECT)

下面是最常用的查询模式:

# 创建游标对象 游标对象 = 数据库对象.cursor()# 写 SQL 语句 sql ='SELECT * FROM hk'# 执行 SQL 游标对象.execute(sql)# 接受所有结果 返回结果 = 游标对象.fetchall()# 打印结果for row in 返回结果:print(row)# 关闭 游标对象.close() 数据库对象.close()

这里 fetchall() 会返回一个 元组列表,每一行数据都是一个元组。


⭐ 六、封装查询函数(实战)

defselect(): sql ='select * from demo' 游标对象.execute(sql) 返回结果 = 游标对象.fetchall()print(返回结果)

你可以在需要的地方直接调用:

select()

⭐ 七、执行插入(INSERT + commit)

插入与查询不同,执行后必须 commit(),否则无法真正写入数据库。

definsert(): name =input('请输入你的姓名:') sql =f'insert into demo value(null,"{name}")' 游标对象.execute(sql) 数据库对象.commit()# ✔️ 必须提交

⚠ 注意字符串需要加引号,否则 SQL 会报错。


下面我在你 刚刚那篇 ZEEKLOG 博客的基础上,继续追加两个核心模块:

DELETE(删除数据)
UPDATE(修改数据)

格式依旧符合 ZEEKLOG 爆款文章结构,你可以直接复制回博客中,放在原文 “七、执行插入(INSERT)” 的后面即可。


⭐ 八、执行删除(DELETE)

删除操作同样需要 commit() 才能生效。

最推荐写成一个交互式函数:输入要删除的 ID,然后执行删除。

defdelete(): delete_id =input('请输入要删除的ID:') sql =f'DELETE FROM demo WHERE id = {delete_id}' 游标对象.execute(sql) 数据库对象.commit()print(f'ID 为 {delete_id} 的记录已删除')

⚠ 注意:

  • DELETE 操作必须加 WHERE 条件
  • 否则可能会删光整个表!

示例输入:

请输入要删除的ID:3 

输出:

ID 为 3 的记录已删除 

⭐ 九、执行修改(UPDATE)

UPDATE 同样需要提交才能生效。

这是一个最常见的「根据 ID 修改姓名」的例子:

defupdate(): update_id =input('请输入要修改的ID:') new_name =input('请输入新的姓名:') sql =f'UPDATE demo SET name = "{new_name}" WHERE id = {update_id}' 游标对象.execute(sql) 数据库对象.commit()print(f'ID 为 {update_id} 的记录已成功修改')

执行时会有两次输入:

请输入要修改的ID:2 请输入新的姓名:王五 

输出:

ID 为 2 的记录已成功修改 

⭐ 十、最终完整版(增删改查四合一)

你可以在原文的最终代码中加入以下内容,结构完全统一:

defselect(): sql ='select * from demo' 游标对象.execute(sql) 返回结果 = 游标对象.fetchall()print(返回结果)definsert(): name =input('请输入你的姓名:') sql =f'insert into demo value(null,"{name}")' 游标对象.execute(sql) 数据库对象.commit()print('插入成功')defdelete(): delete_id =input('请输入要删除的ID:') sql =f'DELETE FROM demo WHERE id = {delete_id}' 游标对象.execute(sql) 数据库对象.commit()print(f'ID 为 {delete_id} 的记录已删除')defupdate(): update_id =input('请输入要修改的ID:') new_name =input('请输入新的姓名:') sql =f'UPDATE demo SET name = "{new_name}" WHERE id = {update_id}' 游标对象.execute(sql) 数据库对象.commit()print(f'ID 为 {update_id} 的记录已成功修改')

🎯 总结:增删改查你已经全会了!

至此为止,你已经拥有:

  • ✔ SELECT 查询
  • ✔ INSERT 插入
  • ✔ DELETE 删除
  • ✔ UPDATE 修改
  • ✔ commit 提交机制
  • ✔ 游标对象生命周期
  • ✔ 完整数据库交互代码

Read more

前端人拿不到offer,九成是不知道这个新风向

今年大部分互联网公司面试的题目已经开始小部分八股文,大部分场景题了,公司需要的不仅是知识扎实,而且招进来就能上手项目的面试者… 2026最新高频场景题 * 1. 请求失败会弹出一个toast,如何保证批量请求失败,只弹出一个toast * 2. 如何减少项目里面if-else * 3. babel-runtime 作用是啥 * 4. 如何实现预览PDF文件 * 5. 如何在划词选择的文本上添加右键菜单(划词:鼠标滑动选择一组字符,对组字符进行操作) * 6. 富文本里面,是如何做到划词的(鼠标滑动选择一组字符,对组字符进行操作)? * 7. 如何做好前端监控方案 * 8. 如何标准化处理线上用户反馈的问题 * 9. px如何转为rem * 10. 浏览器有同源策略,但是为何 cdn 请求资源的时候不会有 跨域限制 * 11. cookie可以实现不同域共享吗 * 12. axios是否可以取消请求 * 13. 前端如何实现折叠面板效果? * 14. dom里面,如何判定a元素是否是b元素的子元 * 15. 判断一个对象是否为空,包含了其原型链上是否有自

By Ne0inhk
哈希的介绍

哈希的介绍

1. unordered系列关联式容器     下面来看哈希,首先看关联式容器unorder_map和unorder_set,它们底层是哈希表,用法和map set一样。下面浅浅过一下,它是单向迭代器,因为没有rbegin和rend。也就是红黑树和哈希表实现的map和set用法几乎相同,区别是:1.unorder系列是单向迭代器。2.unorder系列遍历出来不是有序的。下面演示一下: 它只能去重,不能排序,它也是有multi版本的。再演示一下unorder_map: 2.哈希     下面正式看哈希,什么是哈希呢?我们以前遇到的搜索有这样几类:首先是暴力查找,在一个数组里都查,这样非常慢。于是有人衍生出了有序数组的二分查找,但它的前提是排序,而且增删查改不方便,过程中为了保证有序会涉及大量的数据挪动。因此衍生出了平衡搜索树,此时基础上又出现了新的搜索,这种搜索叫哈希(散列)。它的本质是存储的值跟存储位置建立出一个映射关系,什么意思呢,先来看一个计数排序的样例: 有上面这样的一组值,最小的值是15,最大的值是30,总共开了16个空间。然后存映射关系(次数),15映射第一个位

By Ne0inhk
Wfuzz 全面使用指南:Web 应用模糊测试工具详解

Wfuzz 全面使用指南:Web 应用模糊测试工具详解

Wfuzz 是一款功能强大的开源 Web 应用模糊测试(Fuzzing)工具,主要用于自动化发现 Web 应用中的隐藏资源、注入漏洞、目录遍历等问题。它由 Python 编写,支持多种 payload(有效载荷)注入方式,能够对 HTTP 请求的各个部分进行暴力破解或模糊测试,包括 URL 路径、GET/POST 参数、Cookie、HTTP 头、认证信息等。Wfuzz 的设计理念是模块化和可扩展性强,适合渗透测试人员、安全研究员和开发人员用于 Web 安全评估。 Wfuzz 的核心机制是通过在目标 URL 或请求中用特殊的占位符(如 FUZZ、FUZ2Z 等)标记需要模糊测试的位置,然后用指定的 payload 列表逐一替换这些占位符,发送

By Ne0inhk

不用写复杂前端,5 分钟上线 AI 模型交互界面:Gradio 安装使用全攻略 + 特性与适用场景解析

【个人主页:玄同765】 大语言模型(LLM)开发工程师|中国传媒大学·数字媒体技术(智能交互与游戏设计) 深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调 技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️ 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案         专栏传送门:LLM大模型开发 项目实战指南、Python 从真零基础到纯文本 LLM 全栈实战、 从零学 SQL + 大模型应用落地、大模型开发小白专属:从 0 入门 Linux&Shell       「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作!

By Ne0inhk