目录
前言
一、上节快速回顾
二、可视化管理工具 Navicat
如何安装Navicat
如何运行 SQL 文件?
三、视图(View)
3.1 什么是视图?
3.2 基本语法
3.3 使用示例
四、索引(Index)
4.1 为什么需要索引?
4.2 索引不是无脑加的
4.3 索引的三种类型
4.4 实际例子
五、PyMySQL 正式登场
5.1 什么是 PyMySQL?
5.2 连接数据库
5.3 完整使用流程
5.4 增删改查示例
六、补充:SQLite 和 PyMySQL 的区别
七、学习建议
1. 输出大于输入
2. 多看多拓展
3. 代码一定要多敲
4. 提问要有深度
总结
前言
前面几篇我们都是基于终端来实操数据库以及数据库里面的表操作,那么今天我们就来聊点实际干活里天天打交道的工具——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连接数据库的完整流程(增删改查)
数据库不难,但用得多,多练才是王道。
编程一定要多敲多练,祝各位早日学有所成!
如果这篇文章对你的学习道路有帮助的话,动动发财的小手点个小赞赞吧,感谢各位义父!!!
学习永无止境,唯有实操才能蜕变,一起加油兄弟们!!!
每日励志文案:
哪怕输一百次,也希望你有开始一百零一次的勇气