从零开始的Python-SQL入门指南:学习数据分析的基础技能

该教程涵盖了SQL语言的基础,包括数据库的介绍、MySQL的安装、使用图形化工具Navicat和DBeaver操作MySQL,以及SQL的DDL、DML和DQL操作。此外,还介绍了如何使用Python的pymysql模块与MySQL交互,进行数据的增删改查操作,并通过综合案例展示了数据导入数据库的流程。
摘要由CSDN通过智能技术生成

数据来源

 01 SQL前言

无处不在的SQL 

后续学习的铺垫 

学到什么程度

黑马程序员MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程_哔哩哔哩_bilibili

总结

02 数据库介绍

无处不在的数据库

数据库如何存储数据

数据库管理系统(数据库软件)

数据库和SQL的关系

总结 

03 MySQL安装

下载地址:https://downloads.mysql.com/archives/installer

我个人更喜欢用Navicat:百度网盘 请输入提取码

配置环境变量 

04 MySQL的入门使用(我这里使用Navicat进行演示)

在命令提示符内使用MySQL

这些命令行语句一样可以使用Navicat运行 

-- show databases  # 查看有哪些数据库
-- use mysql       # 指定使用某个数据库
show tables        # 查看数据库内有哪些表

使用图形化工具操作MySQL (如果安装了Navicat就不用管这个)

下载地址:https://dbeaver.io/download

DBeaver安装

DBeaver连接MySQL 

05 SQL基础与DDL

SQL的概述

SQL语言的分类

SQL的语法特征

DDL - 库管理

DDL - 表管理 

总结

06 SQL - DML

DML

数据插入 INSERT

演示:SQL的基本语句用法 搜索:INSERT

数据删除 DELETE

SQL的基本语句用法

演示: SQL的基本语句用法  搜索:DELETE 

数据更新 UPDATE

演示: SQL的基本语句用法  搜索:UPDATE

总结

07 SQL - DQL

1)基础数据查询

演示: SQL的基本语句用法  搜索:SELECT

基础数据查询 - 过滤 

 演示: SQL的基本语句用法  搜索:WHERE

总结

2)分组聚合

分组聚合

演示

准备一个数据表,随便写点数据

-- 按照性别分组,并计算每组的平均值 
SELECT gender as 姓别,avg(age) as 平均年龄 ,SUM(age) as 年龄的和,MIN(age) as 最小年龄,MAX(age) as 最大年龄,COUNT(id) as 行数(数量) FROM student GROUP BY gender  

总结

3)排序分页

结果排序

演示

-- 按照年龄进行升序排序 (默认就是ASC升序排序)
-- SELECT * FROM student ORDER BY age ASC
-- 加限制条件,只排序年龄大于18的
-- SELECT * FROM student WHERE age > 18 ORDER BY age ASC
--  DESC 降序排序    ASC 升序排序
SELECT * FROM student WHERE age > 18 ORDER BY age DESC

结果分页限制

演示

-- limit ?,?'  // ? 开始查询的索引 , ? 要查多少条数据
-- SELECT * FROM student WHERE age > 18 ORDER BY age LIMIT 3   # 年龄大于18的前3条数据
-- SELECT * FROM student ORDER BY age  LIMIT 0,3  # 从第一条数据开始查3条数据
-- 查询年龄大于18 、按照年龄进行分组、按照年龄进行升序排序、只取前3条数据 
SELECT * FROM student WHERE age > 18 GROUP BY age ORDER BY age  LIMIT 3;  

总结

08 Python 操作 MySQL

基础使用

pymysql

pip install pymysql

创建到MySQL的数据库链接

 演示

"""
演示创建到MySQL的数据库链接
"""
from pymysql import  Connect
# 获取到MySQL数据库的链接对象
conn =Connect(
    host="localhost",    # 主机名或ip地址
    port=3306,           # 端口,默认3306
    user='root',         # 账户名
    password='207080'     # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
)
# 打印MySQL数据库软件信息
print(conn.get_server_info())
# 关闭到数据库的链接
conn.close()

执行SQL语句(查询、创建表)

 演示

"""
演示创建到MySQL的数据库链接并执行SQL语句
"""
from pymysql import  Connect

# 获取到MySQL数据库的链接对象
conn =Connect(
    host="localhost",    # 主机名或ip地址
    port=3306,           # 端口,默认3306
    user='root',         # 账户名
    password='207080'     # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
)
# 打印MySQL数据库软件信息
print(conn.get_server_info())

# 获取游标对象
curses = conn.cursor()

# 先选择数据库
conn.select_db("my_db_01")

# 使用游标对象,执行SQL语句
curses.execute("SELECT gender as 姓别,avg(age) as 平均年龄 FROM student GROUP BY gender") # 按照性别分组,并计算每组的平均值

# 获取查询结结果,:tuple  类型注解标记这个results变量是个元组(不是强制性的,只看给我们开发者自己看的)
results:tuple = curses.fetchall()
print(results)  # 元组内嵌套了元组,里面嵌套的每一个元组都是一行数据
for r in results:
    print(f"性别:{r[0]},平均年龄:{r[1]}")

# 关闭到数据库的链接
conn.close()

总结

数据插入

commit提交

演示 

"""
演示创建到MySQL的数据库链接并执行SQL语句
"""
from pymysql import  Connect

# 获取到MySQL数据库的链接对象
conn =Connect(
    host="localhost",    # 主机名或ip地址
    port=3306,           # 端口,默认3306
    user='root',         # 账户名
    password='207080'     # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
)
# 打印MySQL数据库软件信息
print(conn.get_server_info())

# 获取游标对象
curses = conn.cursor()

# 先选择数据库
conn.select_db("my_db_01")

# 使用游标对象,执行SQL语句
curses.execute("INSERT INTO student VALUES(6,'李银河','22','男')") # 插入数据

conn.commit()  # 提交更改

# 关闭到数据库的链接
conn.close()

代码提交后到数据库中查看结果 

自动commit

    autocommit=True      # 设置自动提交

总结

09 综合案例

案例需求

数据内容

DDL定义 

 实现步骤

演示

1)创建一个数据库-  py_sql

2)创建数据表-orders

CREATE TABLE orders(
 order_date DATE,      # 存储日期字段
 order_id VARCHAR(255), # 存储订单编号
 money INT,            # 销售金额 
 province VARCHAR(10)   # 省份
);

3)基于面向对象的章节的案例代码(搜索:综合案例)基础上开始写SQL

将 main.py  替换成下面代码运行就能把数据存储到数据库了

from file_define import  FileReader,TextFileReader,JsonFileReader   # 从file_define文件中把刚才写好的类全部导入进来
from data_define import Record      # 在data_define文件中把数据定义的类Record也导入进来
from pymysql import Connect

# 普通的文本文件
text_file_reader = TextFileReader("F:/案例数据/数据分析案例/2011年1月销售数据.txt")  # 调用类创建类对象并把文件路径传给类的构造方法
# JSON文件
json_file_reader = JsonFileReader("F:/案例数据/数据分析案例/2011年2月销售数据JSON.txt")

# 有文件路径了,调用TextFileReader类的写(实现抽象方法)父类的方法read_data,返回格式处理后的数据
jan_data:list([Record]) = text_file_reader.read_data()    # 一月的数据
feb_data:list([Record]) = json_file_reader.read_data()    # 二月的数据
# 将2个月份的数据合并为1个list列表存储
all_data = jan_data + feb_data
# print(all_data)

# 获取到MySQL数据库的链接对象
conn =Connect(
    host="localhost",    # 主机名或ip地址
    port=3306,           # 端口,默认3306
    user='root',         # 账户名
    password='207080',   # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
    autocommit=True      # 设置自动提交
)
# 打印MySQL数据库软件信息
print(conn.get_server_info())

# 获取游标对象
curses = conn.cursor()

# 先选择数据库
conn.select_db("py_sql")

for record in all_data:  # 遍历all_data列表拿到每一个元素,然后添加到数据库
    my_date = record.date          # 日期
    my_order_id = record.order_id  # 订单id
    my_money = record.money        # 金额
    my_province = record.province  # 订单省份
    sql = f"INSERT INTO orders \
    VALUES('{my_date}','{my_order_id}','{my_money}','{my_province}')"
    # 使用游标对象,执行SQL语句
    # print(f"{my_date},{my_order_id},{my_money},{my_province}")
    curses.execute(sql) # 插入数据

# 关闭到数据库的链接
conn.close()

查看数据库

练习 

演示 - 在原来的main.py 文件的基础上改一下

from file_define import  FileReader,TextFileReader,JsonFileReader   # 从file_define文件中把刚才写好的类全部导入进来
from data_define import Record      # 在data_define文件中把数据定义的类Record也导入进来
from pymysql import Connect

# 普通的文本文件
text_file_reader = TextFileReader("F:/案例数据/数据分析案例/2011年1月销售数据.txt")  # 调用类创建类对象并把文件路径传给类的构造方法
# JSON文件
json_file_reader = JsonFileReader("F:/案例数据/数据分析案例/2011年2月销售数据JSON.txt")

# 有文件路径了,调用TextFileReader类的写(实现抽象方法)父类的方法read_data,返回格式处理后的数据
jan_data:list([Record]) = text_file_reader.read_data()    # 一月的数据
feb_data:list([Record]) = json_file_reader.read_data()    # 二月的数据
# 将2个月份的数据合并为1个list列表存储
all_data = jan_data + feb_data
# print(all_data)

# 获取到MySQL数据库的链接对象
conn =Connect(
    host="localhost",    # 主机名或ip地址
    port=3306,           # 端口,默认3306
    user='root',         # 账户名
    password='207080',   # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
    autocommit=True      # 设置自动提交
)
# 打印MySQL数据库软件信息
print(conn.get_server_info())

# 获取游标对象
curses = conn.cursor()

# 先选择数据库
conn.select_db("py_sql")

# 插入数据到数据库
for record in all_data:  # 遍历all_data列表拿到每一个元素,然后添加到数据库
    my_date = record.date          # 日期
    my_order_id = record.order_id  # 订单id
    my_money = record.money        # 金额
    my_province = record.province  # 订单省份
    sql = f"INSERT INTO orders \
    VALUES('{my_date}','{my_order_id}','{my_money}','{my_province}')"
    # 使用游标对象,执行SQL语句
    # print(f"{my_date},{my_order_id},{my_money},{my_province}")
    # curses.execute(sql) # 插入数据

# 从数据库读取数据,报存在本地文件
f = open("F:/销售数据.txt", "a", encoding="UTF-8")  # 定义文件的操作对象,a 如果文件存在就追加元素,不存在就创建

# 定义查询sql
sql = "SELECT * FROM orders"

# 使用游标对象,执行SQL语句
curses.execute(sql)

# 获取查询结结果,:tuple  类型注解标记这个results变量是个元组(不是强制性的,只看给我们开发者自己看的)
results:tuple = curses.fetchall()

# 遍历results元组把数据保存到本地文件
for i in results:
    # 案例要求的数据格式是字典,这里把数据格式转换成字典:{'date:2011-02-28, order_id:7726afdc-c05e-4f4d-8f4d-376dc6d24522, money: 1920, province: 河南省'}
    dict_item = {f"date:{i[0]}, order_id:{i[1]}, money: {i[2]}, province: {i[3]}"}
    f.write(f'{dict_item}\n')  # write() 文件写入,这个写入方法要求的数据格式是字符串, \n 让文件内容换行

f.close()  # 关闭文件
# 关闭到数据库的链接
conn.close()

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗蛋的博客之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值