Python高级编程11:PyMySQL
目录
前言
前面几篇我们都是基于终端来实操数据库以及数据库里面的表操作,那么今天我们就来聊点实际干活里天天打交道的工具——PyMySQL。
说白了,就是用Python代码去操控数据库。
数据库这块语法不算难,但比较繁琐,多敲多练才是王道。好了,废话不多说,开整!
一、上节快速回顾
先花30秒过一下上节讲啥了,免得接不上:
数据库表的三种关系:
1. 单对单
2. 单对多
3. 多对多
连接查询(JOIN):
左连接/右连接 --> 以对应方向为主表,没有的数据显示Null
内连接 --> 多表数据连在一起输出,没有的数据不输出
这个没搞懂的建议翻翻我上篇博客,连接查询在后面做项目用得特别多。点击此处回忆多个表的操作对你有帮助
二、可视化管理工具 Navicat
在说 PyMySQL 之前,先提一下 Navicat 这个东西。
以前我们操作数据库都是在终端命令行敲的,也不是不行,就是:
- 操作麻烦,一堆指令要记
- 不美观,看久了眼花
Navicat 就是个可视化的数据库管理工具,点点点就能完成大部分操作。
优点:美观、高效、容易上手
缺点:比起纯命令行,占系统资源多一点
Navicat 新版是付费的,不过有试用版,够学习用了。
如何安装Navicat
以我自身经历推荐给大家一个免费白嫖Navicat的软件,这是GitHub开源的链接,然后根据他里面的步骤一步一步来,就能白嫖一个可用的Navicat,Github里面有很多开源并且好用的项目,很值得去研究和爽玩!!
如何运行 SQL 文件?
选中数据库 → 右键 → 运行 SQL 文件 → 选中你的 .sql 文件 → 执行
比你手动在终端里粘贴复制方便多了。
三、视图(View)
3.1 什么是视图?
当查询语句很长很复杂的时候,代码可读性会变得很差。
这时候就可以用视图(View)功能——它是一个虚拟的表,里面存的是写好了的查询语句。
可以理解成视图就是一个命名了的变量,存的是一条查询语句,用的时候直接调名字就行。
3.2 基本语法
CREATE VIEW 视图名 AS 查询语句;
3.3 使用示例
-- 创建一个视图,存储一个复杂的联表查询
CREATE VIEW v_user_orders AS
SELECT u.name, o.order_id, o.total
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.status = 'completed';
-- 之后直接查视图,就像查普通表一样
SELECT * FROM v_user_orders;
这样代码清爽多了,也好维护。
四、索引(Index)
4.1 为什么需要索引?
打个比方——
你是图书馆管理员,正常情况下书是乱放的,想找一本书得从头翻到尾。
后来你弄了一张目录,按书名、类型排好序,找书的时候直接翻目录,速度快了好几倍。
索引的作用就是这个。
4.2 索引不是无脑加的
很多人容易犯这个错——听说索引能提高查询效率,就给所有字段都加一遍。
索引也是有成本的(占用空间、影响写入速度)。所以:
- 数据量不大,查询需求不多 → 不用加
- 数据经常查询、数据量大 → 加索引
4.3 索引的三种类型
| 索引类型 | 说明 |
|---|---|
| 主键索引 | 给主键加的,自动创建,唯一且非空 |
| 唯一索引 | 数据必须唯一,可以为 NULL |
| 普通索引 | 单纯提高查询效率 |
4.4 实际例子
假设有个学生表,成千上万条数据。想查所有姓 "柳" 的同学:
-- 没有索引:每一行都扫一遍,慢
SELECT * FROM student WHERE name LIKE '柳%';
-- 给 name 加索引后:直接按目录找,快
CREATE INDEX idx_name ON student(name);
五、PyMySQL 正式登场
5.1 什么是 PyMySQL?
PyMySQL 就是用 Python 连接数据库,并执行 SQL 语句的库。
pip install pymysql
5.2 连接数据库
import pymysql
db = pymysql.connect(
host='localhost', # IP 地址,本地就是 localhost
user='root', # 用户名
passwd='123456', # 密码
port=3306, # 端口,默认 3306
database='test_db', # 数据库名
charset='utf8mb4' # 字符编码
)
返回的是一个数据库连接对象。
5.3 完整使用流程
import pymysql
# 1. 连接数据库
db = pymysql.connect(
host='localhost',
user='root',
passwd='123456',
port=3306,
database='test_db',
charset='utf8mb4'
)
# 2. 编写 SQL 语句
sql = "SELECT * FROM stu WHERE age > 20"
# 3. 创建游标(用来执行 SQL)
cursor = db.cursor()
# 4. 执行 SQL
cursor.execute(sql)
# 5. 获取结果
result = cursor.fetchall()
print(result)
# 6. 提交(增删改需要,查询可选)
db.commit()
# 7. 关闭游标和数据库
cursor.close()
db.close()
5.4 增删改查示例
import pymysql
db = pymysql.connect(
host='localhost',
user='root',
passwd='123456',
port=3306,
database='test_db',
charset='utf8mb4'
)
cursor = db.cursor()
# 查
sql = "SELECT * FROM stu"
cursor.execute(sql)
for row in cursor.fetchall():
print(row)
# 增
sql = "INSERT INTO stu(name, sex, age) VALUES('梦山', '男', 29)"
cursor.execute(sql)
db.commit()
# 改
sql = "UPDATE stu SET age = 30 WHERE name = '梦山'"
cursor.execute(sql)
db.commit()
# 删
sql = "DELETE FROM stu WHERE name = '梦山'"
cursor.execute(sql)
db.commit()
cursor.close()
db.close()
注意:增删改操作后一定要 db.commit(),否则数据不会真正保存到数据库。
六、补充:SQLite 和 PyMySQL 的区别
| 对比项 | SQLite | PyMySQL |
|---|---|---|
| 类型 | 小型文件数据库 | 大型关系型数据库 |
| 适用场景 | 本地数据、小型应用 | Web 项目、企业级应用 |
| 是否需要单独安装 | 不需要 | 需要 MySQL 服务 |
| 并发能力 | 一般 | 强 |
SQLite 适合练手和小型项目,真正干活基本都是 MySQL。
七、学习建议
1. 输出大于输入
知识只是听了,不代表会了。能讲出来、写出来,才是真正掌握了。
建议:
- 写笔记(复习 + 思考)→ 尝试用自己的话描述
- 尝试讲给别人听,教是最好的学
2. 多看多拓展
多逛技术博客网站,例如 博客园、CSDN、Github,学习别人写法,看多了思路自然开阔。
3. 代码一定要多敲
看十遍不如敲一遍,敲多了自然就有感觉,肌肉记忆比脑子记忆靠谱。
4. 提问要有深度
提出问题 + 解决方案 + 相应数据 + 备用方案,才最受欢迎。
总结
这篇文章主要梳理了以下内容:
- Navicat 可视化数据库工具的基本使用
- 视图(View) 的概念和使用
- 索引(Index) 的三种类型和适用场景
- PyMySQL 连接数据库的完整流程(增删改查)
数据库不难,但用得多,多练才是王道。
编程一定要多敲多练,祝各位早日学有所成!
如果这篇文章对你的学习道路有帮助的话,动动发财的小手点个小赞赞吧,感谢各位义父!!!
学习永无止境,唯有实操才能蜕变,一起加油兄弟们!!!
每日励志文案:
哪怕输一百次,也希望你有开始一百零一次的勇气
更多推荐


所有评论(0)