目录
说明:该文章是学习 黑马程序员在B站上分享的视频 黑马程序员python教程,8天python从入门到精通而记录的笔记,笔记来源于本人。 若有侵权,请联系本人删除。笔记难免可能出现错误或笔误,若读者发现笔记有错误,欢迎在评论里批评指正。此笔记对应的doc文件的百度网盘下载链接为 Python入门(黑马)的学习笔记,提取码:1b3k。另外,本次笔记加了 gif动图,使用免费的potplayer播放器可以控制gif的播放进度。
引、为什么要学习SQL
1. 为什么要学习SQL
2.需学习到什么程度
一、数据库介绍
1.学习目标
理解数据库的作用;了解常见的数据库软件。
2.无处不在的数据库
3.数据库如何存储数据
4.数据库管理系统(数据库软件)
5.数据库和SQL的关系
6.本小节的总结
二、MySQL的安装
1.学习目标
掌握在Windows系统中安装MySQL数据库。
2. MySQL的介绍
3. MySQL的版本
4. MySQL的安装
(1)安装包的下载
安装包的下载方法如下(如果觉得下载太慢,可以到百度网盘上下载):
如下图,首先打开浏览器,进入MySQL的官网,点击“DOWNLOADS”。
如下图,选择社区版下载(即“MySQL Community (GPL) Downloads”),选择Windows版(即“MySQL Installer for Windows”),然后选择最新的版本的离线安装包进行下载(这里有两个下载链接,靠上的那个是联网安装包,靠下那个是离线安装包),然后点击只需要下载(即“No thanks, just start my download.”)。如果需要下载其他版本,请点击“Archives”,然后选择需要的版本进行下载。
等待安装包的下载,直到下载完成(放任浏览器下载实在太慢,可选择使用迅雷或IDM下载直接起飞。个人不建议用迅雷,用了还要清理一堆垃圾)。
(2)安装的流程
双击安装包,在弹出的两个弹窗中点击“是”(gif图片可能录不到),然后选择“Custom”,点击“Next”。然后选择安装的MySQL的版本,点击向右的箭头,然后在右侧点击一下所选的版本,点击“Advanced Options”。
如下图,选择软件的安装路径以及数据的存储路径,
之后,连点两个“Next”,在弹出的警告中点击“Yes”,再连点两个“Next”。再如图所示,安装一下MySQL Workbench。
之后,如图所示,点击“Execute”,连续点击“Next”。
然后输入MySQL Root Password,在Repeat Password中再输一次该密码,接着一直点击“Next”或者“Execute”或者“Finish”。
接着将快捷键拖到桌面上。
(3)配置MySQL
如下图所示,找到MySQL的安装路径,然后点击上方的文件路径,使用快捷键Ctr+C进行复制。之后,在此电脑处右击,点击“属性”,选择“高级系统设置”。
点击“环境变量”,双击“Path”进行编辑,点击“新建”,然后使用快捷键Ctr+V将刚刚复制的路径粘贴进来,然后一直“确定”就行了。
(4)验证MySQL是否安装成功
然后,如图所示,搜索“cmd”,打开命令提示符。
如下图,输入“mysql -uroot -p”,输入刚刚安装时的root密码,成功进入mysql,说明安装成功。
三、MySQL的入门使用
1.学习目标
掌握使用图形化工具操作MySQL数据库软件。
2.在命令提示符内使用MySQL
可以,如下图所示,去简单使用以下。(命令有“mysql -uroot -p”,“show databases;”,“use sys;”, “show tables;”,“exit”)
3.使用图形化工具操作MySQL——DBeaver
4.DBeaver的安装
如下图所示,输入DBeaver的官方网址“dbeaver.io”,点击“Download”,在“DBeaver Community”下面选择“Windows (installer)”(community是社区版,是免费的),然后软件就开始下载了。
安装包下载完成后,如下图所示,双击安装包,选择语言,点击“OK”,点击“下一步”、“我接受”、“下一步”。
如下图所示,点击“下一步”,选择安装路径,点击“下一步”。
如下图所示,点击“安装”,安装完后勾选创建桌面快捷方式“Create Desktop Shorteut”,点击“完成”。
5.熟悉一下软件DBeaver
为了大致熟悉一下软件,软件安装完成后,打开软件,选择“No”。选择本次使用的数据库“MySQL”,点击“Next”,输入安装MySQL时填写的root密码,点击“编辑驱动设置”。(不要像视频那样直接点击“测试连接”,可能会报错。可能是MySQL安装的步骤跟视频不一样的缘故,也可能是为了做gif图片时点错了,不小心退出了重进,需要重新操作一遍的缘故)
如下图,点击“库”,“下载/更新(D)”,下载以“com”开头的那个文件。
如下图,点击“OK”,点击“测试连接”,发现 DBeaver可以连接到数据库MySQL,点击“OK”, 点击“Finish”。
点击打开“数据库”的目录,发现数据库不全,这是因为上面三个库(即“information_schema”、“mysql”、“performance_schema”)是MySQL自己使用的内置库,所以在当前这个图形化软件DBeaver里面,它为了怕你误操作,可能把这内置的3个库搞出问题,进而可能导致整个MySQL软件不能用,所以直接就给隐藏了,不给显示了。
如下图所示操作,即可看到sys库中的表sys_config中的里有什么内容。这种表格不再是excel那种表格,而是数据库中提供的表格。
四、SQL基础与DDL
1.学习目标
对SQL语言有基础的认知;掌握SQL语言的分类;掌握基础的DDL语法。
2. SQL的概述
3. SQL语言的分类
4.SQL的语法特征
5.DDL-库管理
6.DDL-表管理
7.本节的代码演示
打开软件DBeaver,点击SQL,会弹出一个编辑区。输入代码,并点击三角形符号运行,展示MySQL提供给我们使用的库。
show databases;
SQL对大小写不敏感,如下图修改代码后,运行结果不变。
SHOW databases;
SQL可以单行或多行书写,最后以“;”号结束。如下图修改代码后,运行结果不变。
SHOW
databases;
为了熟悉SQL的注释方式,如下图修改代码后,运行结果不变。
SHOW
-- 我是单行注释的方式1
# 我是单行注释的方式2
databases;
/*
* 我是
* 多行注释
*/
为了演示使用数据库和查看数据库的语法,如下图修改代码后运行。
USE sys;# 使用sys库
SELECT DATABASE();# 查看当前使用的库
为了演示创建库的语法,如下图修改代码后运行。
create database test charset utf8;
/*
* "create database test charset utf8;":创建一个字符集的编码为UFT-8,名称为test的库
* "create database test;":创建一个名称为test的库
* b站弹幕:MySQL的UFT-8只支持3字节,建议使用代替UTF-8且无限制的UTF8MB4
*/
SHOW DATABASES;
为了演示删除库的语法,如下图修改代码后,运行前后都更新一次MySQL里的内容。
DROP database test;# 删除库
SHOW DATABASES;# 显示MySQL中的库
为了演示查看表格的语法,如下图修改代码后运行。
USE sys;# 选择库
SHOW tables;# 显示库sys中的表格
为了演示创建表格的语法,如下图修改代码后运行,并刷新,然后在对应目录里查看表student。
CREATE database test;# 创建库test
USE test;# 使用库test
CREATE table student(
id int,
name varchar(10), # 文本长度最长为10,varchar()最长可设成255
age int
);# 在库test中创建表student
8.本小节的总结
五、SQL-DML
1.学习目标
掌握DML:INSERT数据插入;掌握DML:DELETE数据删除;掌握DML:UPDATE数据更新。
2.DML
3.数据插入INSERT
4.数据删除DELETE
5.数据更新UPDATE
6.本节的代码演示
(1).数据插入INSERT的演示
打开软件DBeaver,输入代码后,将之前创建的表student删除,然后运行代码,代码细节请阅读注释。
USE test;# 1.使用库test
# 2.在库test中创建一个名为student的表
CREATE table student(
id int,
name varchar(10), # 文本长度最长为10,varchar()最长可设成255
age int
);# 在库test中创建表student
# 3.给名为student的表的id所在列添加数据
insert into student(id) values(1),(2),(3);
# 4.给名为student的表的id、name、age所在列添加数据
insert into student(id,name,age) values(4,'周杰轮',31),(5,'林俊节',33); # MySQL中只支持单引号
/*
* 上一句代码可改为insert into student values(4,'周杰轮',31),(5,'林俊节',33);
* 这种省略变量名的写法,要求一行中每个数据都有对应的一个值,而且变量赋值的顺序和定义时保持一致
*/
(2).数据删除DELETE的演示
如下图,首先,看到上次生成的表student中存在“id=1”的行,为了删除这一行数据,如下编程并运行,运行后点击student表,再按F5刷新,可看到“id=1”的行的数据被删除。
DELETE FROM student WHERE id=1; # 删除“id=1”的行的数据
如果想将“id<4”的行的数据删除,如下编程并运行,运行后点击student表,再按F5刷新,即可看到“id<4”的行的数据被删除。
DELETE FROM student WHERE id<4; # 删除“id<4”的行的数据
如果想将student整张表的数据删除, 如下编程并运行,运行后点击student表,再按F5刷新,即可看到整张表的数据被删除,但是表还在。
DELETE FROM student; # 删除student整张表
(3).数据更新UPDATE的演示
如图,先使用如下代码给表student添两行数据。
insert into student(id,name,age) values(4,'周杰轮',31),(5,'林俊节',33); # MySQL中只支持单引号
如图,如果想将“id=4”的行的“name”改成“张学油”,如下编程并运行,运行后点击student表,再按F5刷新。
UPDATE student SET name='张学油' WHERE id=4; # 将“id=4”的行的“name”改成“张学油”
如果想将整张student表的“name”改成“王力鸿”,如下编程并运行,运行后点击student表,再按F5刷新。
UPDATE student SET name='王力鸿'; # 将整张student表的“name”改成“王力鸿”
7.本小节的总结
六、SQL-DQL
6.1 基础查询(SELECT)
1.学习目标
掌握DQL:SELECT语句进行基础的数据查询。
2. 基础数据查询SELECT(支持过滤查询)
3.本节的代码演示
打开软件DBeaver,发现存在旧表student,输入代码删除旧表,并重新建表添加数据,然后运行代码,代码细节请阅读注释。
DROP table student;# 1.删去存在的旧表student
# 2.创建一个名为student的表
CREATE table student(
id int,
name varchar(10),
age int,
gender varchar(4)
);
# 3.给名为student的表添加数据
INSERT INTO student values(10001,'周杰轮',31,'男'),(10002,'王力鸿',33,'男'),
(10003,'蔡依琳',35,'女'),(10004,'林志灵',36,'女'),(10005,'刘德滑',33,'男'),
(10006,'张大山',10,'男'),(10007,'刘志龙',11,'男'),(10008,'王潇潇',33,'女'),
(10009,'张一梅',20,'女'),(10010,'王一倩',13,'女'),(10011,'陈一迅',31,'男'),
(10012,'张晓光',33,'男'),(10013,'李大晓',15,'男'),(10014,'吕甜甜',36,'女'),
(10015,'曾悦悦',31,'女'),(10016,'刘佳慧',21,'女'),(10017,'项羽凡',23,'男'),
(10018,'刘德强',26,'男'),(10019,'王强强',11,'男'),(10020,'林志慧',25,'女');
如图,为了熟悉SELECT的语法,编写代码并运行,代码细节请阅读注释
select id,name FROM student; # 查看表student的id和name所在的列
select * FROM student; # 查看student表
select * FROM student WHERE age > 20; # 查看student表中满足“age>20”的数据
select * FROM student WHERE gender = '女'; # 查看student表中满足“gender = '女'”的数据
4.本小节的总结
6.2 分组聚合(加GROUP BY)
1.学习目标
掌握DQL:GROUP BY进行分组聚合查询。
2.分组聚合的定义与语法(聚合函数SUM、AVG、MIN、MAX、COUNT)
注:GROUP BY用于分组,聚合函数用于聚合,聚合函数可单独使用。
3.本节的代码演示
打开软件DBeaver,本次使用的表还是上次的表。
如图,编写代码练习分组聚合的语法,并运行。
# 计算不同性别的平均年龄,不同姓别的两组中各自的年龄和、最小值、最大值、人数
SELECT gender,avg(age),sum(age),min(age),max(age),count(*)
FROM student GROUP BY gender;
4.本小节的总结(含分组聚合的注意事项)
例如:“SELECT gender,avg(age) FROM student GROUP BY gender;”。
6.3 排序分页
1.学习目标
掌握DQL:对查询结果进行排序分页。
2.结果排序(加ORDER BY)
3.结果分页限制(加LIMIT)
4.本节的代码演示
打开软件DBeaver,本次使用的表还是上次的表。
如图,编写代码练习分组聚合的语法,并运行。
# 将20岁以上的人挑选出来,并按升序进行排序
SELECT * FROM student WHERE age > 20
ORDER BY age ASC; # 排序默认升序,ASC可以不写
# 将20岁以上的人挑选出来,并按降序进行排序
SELECT * FROM student WHERE age > 20 ORDER BY age DESC;
# 最多只展示5条数据
SELECT * FROM student LIMIT 5;
# 从第10条(不包括第10条)开始向后,最多只展示5条数据
SELECT * FROM student LIMIT 10,5;
# 将大于20岁的人按年龄进行分组,并统计各组人数,然后按升序进行排序
select age,count(*) from student where age>20 group by age order by age;
# 将大于20岁的人按年龄进行分组,并统计各组人数,然后按升序进行排序,且最多展示3条
select age,count(*) from student where age>20 group by age order by age LIMIT 3;
5.本小节的总结
七、Python & MySQL
7.1 基础使用
1.学习目标
掌握Python执行SQL语句操作MySQL数据库软件。
2. pymysql及安装
安装过程:如图所示,搜索“cmd”,打开命令提示符。然后,输入“pip install pymysql”并等待安装完成。
3.创建到MySQL的数据库链接
4.执行SQL语句
5.本节的代码演示
在进入演示前,如下图,首先使用命令“pip install --upgrade cryptography pymysql”安装或更新两个Python包,即“cryptography”密码包与“pymysql”两个包。
打开软件PyCharm,创建一个名为“02_SQL入门”的文件夹,创建一个名为“01_pymysql入门”的py文件。
首先,编写如下代码并运行,如果出现MySQL的版本号即可说明能够正常连接上MySQL。
"""
演示Python pymysql库的基础操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@" # 安装MySQL时所填的root密码
)
print(conn.get_server_info()) # 拿到MySQL库的基础信息后,打印
# 关闭链接
conn.close()
如下图,继续编写代码,执行后会在库test中创建表test_pymysql。在展示现象时,需来回打开DBeaver进行查看。
"""
演示Python pymysql库的基础操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@" # 安装MySQL时所填的root密码
)
# print(conn.get_server_info()) # 拿到MySQL库的基础信息后,打印 # 测试代码
# 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
conn.select_db('test') # 选择数据库
# 执行sql
cursor.execute("create table test_pymysql(id int);") # 在python端的SQL语句的“;”可省略
# 关闭链接
conn.close()
在执行查询的SQL语句时会使用代码“.fetchall()”,如下编程,看看它的效果,可见这是一个双层嵌套的元组。
"""
演示Python pymysql库的基础操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@" # 安装MySQL时所填的root密码
)
# print(conn.get_server_info()) # 拿到MySQL库的基础信息后,打印 # 测试代码
# 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
conn.select_db('test') # 选择数据库
# 执行sql
# cursor.execute("create table test_pymysql(id int);") # 在python端的SQL语句的“;”可省略
# 执行查询性质SQL
cursor.execute("select * from student") # 在python端的SQL语句的“;”可省略
# 获取查询结果
results: tuple = cursor.fetchall()
print(results)
# 关闭链接
conn.close()
然后,略微改动代码即可得到查询结果。
"""
演示Python pymysql库的基础操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@" # 安装MySQL时所填的root密码
)
# print(conn.get_server_info()) # 拿到MySQL库的基础信息后,打印 # 测试代码
# 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
conn.select_db('test') # 选择数据库
# 执行sql
# cursor.execute("create table test_pymysql(id int);") # 在python端的SQL语句的“;”可省略
# 执行查询性质SQL
cursor.execute("select * from student") # 在python端的SQL语句的“;”可省略
# 获取查询结果
results: tuple = cursor.fetchall() # 得到一个嵌套元组,内层元组存的是某一行的数据
# print(results) # 测试代码
for r in results:
print(r)
# 关闭链接
conn.close()
6.本小节的总结
7.2 数据插入
1.学习目标
掌握Python执行SQL语句插入数据到MySQL。
2. commit确认及自动commit确认
3.本节的代码演示
打开软件PyCharm,创建一个名为“02_pymysql数据输入”的py文件。
在软件DBeaver使用代码清空student的数据,但保留表格student。
delete from student;
python中如果不编写确认的代码,只编写插入数据的代码是无法插入数据的。如下编写代码并运行,根本没有插入数据。
"""
演示使用pymysql库进行数据插入的操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@" # 安装MySQL时所填的root密码
)
# 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
conn.select_db('test') # 选择数据库
# 执行sql
cursor.execute("insert into student values(10001,'周杰轮',31,'男');") # 向表里添加数据
# 关闭链接
conn.close()
如下图所示,加上一句确认代码后,就可以成功插入数据。
每次都手动commit确认比较麻烦,故如下图所示,将上述代码改成自动commit(即在类Connection中加“autocommit=True”)后再运行。
"""
演示使用pymysql库进行数据插入的操作
"""
from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(
host="localhost", # 主机名(IP地址)
port=3306, # MySQL端口默认3306
user="root", # 账户
password="887thdewiq8@", # 安装MySQL时所填的root密码
autocommit=True # 自动提交确认(即自动commit)
)
# 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
conn.select_db('test') # 选择数据库
# 执行sql
cursor.execute("insert into student values(10002,'林俊节',32,'男');") # 向表里添加数据
# # 通过commit确认
# conn.commit()
# 关闭链接
conn.close()
4.本小节的总结
八、Python & MySQL综合案例
1.学习目标
使用SQL语句和pymysql库完成综合案例的开发。
2.案例需求
3.一些提示
4.本节的代码演示
首先,按照前面的提示,打开软件DBeaver,创建一个名为“py_sql”的库,再在下面创建一个名为“orders”的表。
CREATE DATABASE py_sql charset utf8; # 创建库
USE py_sql; # 使用库
CREATE TABLE orders(
order_date date,
order_id varchar(255),
money int,
province varchar(18)
);
如下图所示,先创建一个名为“03_综合案例”的文件夹,然后将面向对象的综合案例的代码文件复制过来,再仅仅保留其中读取数据的代码(删少了点,在阅读后文时可以看出来,就不改gif图了)。
如下编写“main.py”中的文件,先去DBeaver中确定表oders没有数据,然后运行PyCharm中的代码后,去DBeaver中查看表orders,并刷新,发现数据已经写入。
"""
SQL综合案例,读取文件,写入MySQL数据库中
"""
from file_define import FileReader, TextFileReader, JsonFileReader
from data_define import Record
from pymysql import Connection
# --------------------------数据处理-----------------------------
text_file_reader = TextFileReader("D:/test/2-1/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("D:/test/2-1/2011年2月销售数据JSON.txt")
jan_data: list[Record] = text_file_reader.read_data() # 1月份的数据
feb_data: list[Record] = json_file_reader.read_data() # 2月份的数据
# 将2个月份的数据合并1个list来存储
all_data: list[Record] = jan_data + feb_data # all_data中是包含一个个Record变量的列表
# for record in all_data: # 测试代码
# print(i)
# 构建MySQL链接对象
conn = Connection(
host="localhost",
port=3306,
user='root',
password="887thdewiq8@",
autocommit=True
)
# 获得游标对象
cursor = conn.cursor()
# 选择数据库
conn.select_db('py_sql')
# 组织SQL语句
for record in all_data:
sql = f"insert into orders(order_date,order_id,money,province) " \
f"values('{record.date}','{record.order_id}',{record.money},'{record.province}')"
# print(sql) # 测试代码,用来检测数据是否正确
# 执行SQL语句
cursor.execute(sql)
# 关闭MySQL链接对象
conn.close()
5.课后作业
好了,本章的笔记到此结束,谢谢大家阅读。