当前位置:   article > 正文

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

pysql

数据来源

 01 SQL前言

无处不在的SQL 

后续学习的铺垫 

学到什么程度

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

总结

02 数据库介绍

无处不在的数据库

数据库如何存储数据

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

数据库和SQL的关系

总结 

03 MySQL安装

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

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

配置环境变量 

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

在命令提示符内使用MySQL

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

  1. -- show databases # 查看有哪些数据库
  2. -- use mysql # 指定使用某个数据库
  3. 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)分组聚合

分组聚合

演示

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

  1. -- 按照性别分组,并计算每组的平均值
  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)排序分页

结果排序

演示

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

结果分页限制

演示

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

总结

08 Python 操作 MySQL

基础使用

pymysql

pip install pymysql

创建到MySQL的数据库链接

 演示

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

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

 演示

  1. """
  2. 演示创建到MySQL的数据库链接并执行SQL语句
  3. """
  4. from pymysql import Connect
  5. # 获取到MySQL数据库的链接对象
  6. conn =Connect(
  7. host="localhost", # 主机名或ip地址
  8. port=3306, # 端口,默认3306
  9. user='root', # 账户名
  10. password='207080' # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
  11. )
  12. # 打印MySQL数据库软件信息
  13. print(conn.get_server_info())
  14. # 获取游标对象
  15. curses = conn.cursor()
  16. # 先选择数据库
  17. conn.select_db("my_db_01")
  18. # 使用游标对象,执行SQL语句
  19. curses.execute("SELECT gender as 姓别,avg(age) as 平均年龄 FROM student GROUP BY gender") # 按照性别分组,并计算每组的平均值
  20. # 获取查询结结果,:tuple 类型注解标记这个results变量是个元组(不是强制性的,只看给我们开发者自己看的)
  21. results:tuple = curses.fetchall()
  22. print(results) # 元组内嵌套了元组,里面嵌套的每一个元组都是一行数据
  23. for r in results:
  24. print(f"性别:{r[0]},平均年龄:{r[1]}")
  25. # 关闭到数据库的链接
  26. conn.close()

总结

数据插入

commit提交

演示 

  1. """
  2. 演示创建到MySQL的数据库链接并执行SQL语句
  3. """
  4. from pymysql import Connect
  5. # 获取到MySQL数据库的链接对象
  6. conn =Connect(
  7. host="localhost", # 主机名或ip地址
  8. port=3306, # 端口,默认3306
  9. user='root', # 账户名
  10. password='207080' # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
  11. )
  12. # 打印MySQL数据库软件信息
  13. print(conn.get_server_info())
  14. # 获取游标对象
  15. curses = conn.cursor()
  16. # 先选择数据库
  17. conn.select_db("my_db_01")
  18. # 使用游标对象,执行SQL语句
  19. curses.execute("INSERT INTO student VALUES(6,'李银河','22','男')") # 插入数据
  20. conn.commit() # 提交更改
  21. # 关闭到数据库的链接
  22. conn.close()

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

自动commit

    autocommit=True      # 设置自动提交

总结

09 综合案例

案例需求

数据内容

DDL定义 

 实现步骤

演示

1)创建一个数据库-  py_sql

2)创建数据表-orders

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

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

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

  1. from file_define import FileReader,TextFileReader,JsonFileReader # 从file_define文件中把刚才写好的类全部导入进来
  2. from data_define import Record # 在data_define文件中把数据定义的类Record也导入进来
  3. from pymysql import Connect
  4. # 普通的文本文件
  5. text_file_reader = TextFileReader("F:/案例数据/数据分析案例/2011年1月销售数据.txt") # 调用类创建类对象并把文件路径传给类的构造方法
  6. # JSON文件
  7. json_file_reader = JsonFileReader("F:/案例数据/数据分析案例/2011年2月销售数据JSON.txt")
  8. # 有文件路径了,调用TextFileReader类的写(实现抽象方法)父类的方法read_data,返回格式处理后的数据
  9. jan_data:list([Record]) = text_file_reader.read_data() # 一月的数据
  10. feb_data:list([Record]) = json_file_reader.read_data() # 二月的数据
  11. # 将2个月份的数据合并为1个list列表存储
  12. all_data = jan_data + feb_data
  13. # print(all_data)
  14. # 获取到MySQL数据库的链接对象
  15. conn =Connect(
  16. host="localhost", # 主机名或ip地址
  17. port=3306, # 端口,默认3306
  18. user='root', # 账户名
  19. password='207080', # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
  20. autocommit=True # 设置自动提交
  21. )
  22. # 打印MySQL数据库软件信息
  23. print(conn.get_server_info())
  24. # 获取游标对象
  25. curses = conn.cursor()
  26. # 先选择数据库
  27. conn.select_db("py_sql")
  28. for record in all_data: # 遍历all_data列表拿到每一个元素,然后添加到数据库
  29. my_date = record.date # 日期
  30. my_order_id = record.order_id # 订单id
  31. my_money = record.money # 金额
  32. my_province = record.province # 订单省份
  33. sql = f"INSERT INTO orders \
  34. VALUES('{my_date}','{my_order_id}','{my_money}','{my_province}')"
  35. # 使用游标对象,执行SQL语句
  36. # print(f"{my_date},{my_order_id},{my_money},{my_province}")
  37. curses.execute(sql) # 插入数据
  38. # 关闭到数据库的链接
  39. conn.close()

查看数据库

练习 

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

  1. from file_define import FileReader,TextFileReader,JsonFileReader # 从file_define文件中把刚才写好的类全部导入进来
  2. from data_define import Record # 在data_define文件中把数据定义的类Record也导入进来
  3. from pymysql import Connect
  4. # 普通的文本文件
  5. text_file_reader = TextFileReader("F:/案例数据/数据分析案例/2011年1月销售数据.txt") # 调用类创建类对象并把文件路径传给类的构造方法
  6. # JSON文件
  7. json_file_reader = JsonFileReader("F:/案例数据/数据分析案例/2011年2月销售数据JSON.txt")
  8. # 有文件路径了,调用TextFileReader类的写(实现抽象方法)父类的方法read_data,返回格式处理后的数据
  9. jan_data:list([Record]) = text_file_reader.read_data() # 一月的数据
  10. feb_data:list([Record]) = json_file_reader.read_data() # 二月的数据
  11. # 将2个月份的数据合并为1个list列表存储
  12. all_data = jan_data + feb_data
  13. # print(all_data)
  14. # 获取到MySQL数据库的链接对象
  15. conn =Connect(
  16. host="localhost", # 主机名或ip地址
  17. port=3306, # 端口,默认3306
  18. user='root', # 账户名
  19. password='207080', # 密码(这是我的账户名与密码要根据自己的实际情况改成自己的)
  20. autocommit=True # 设置自动提交
  21. )
  22. # 打印MySQL数据库软件信息
  23. print(conn.get_server_info())
  24. # 获取游标对象
  25. curses = conn.cursor()
  26. # 先选择数据库
  27. conn.select_db("py_sql")
  28. # 插入数据到数据库
  29. for record in all_data: # 遍历all_data列表拿到每一个元素,然后添加到数据库
  30. my_date = record.date # 日期
  31. my_order_id = record.order_id # 订单id
  32. my_money = record.money # 金额
  33. my_province = record.province # 订单省份
  34. sql = f"INSERT INTO orders \
  35. VALUES('{my_date}','{my_order_id}','{my_money}','{my_province}')"
  36. # 使用游标对象,执行SQL语句
  37. # print(f"{my_date},{my_order_id},{my_money},{my_province}")
  38. # curses.execute(sql) # 插入数据
  39. # 从数据库读取数据,报存在本地文件
  40. f = open("F:/销售数据.txt", "a", encoding="UTF-8") # 定义文件的操作对象,a 如果文件存在就追加元素,不存在就创建
  41. # 定义查询sql
  42. sql = "SELECT * FROM orders"
  43. # 使用游标对象,执行SQL语句
  44. curses.execute(sql)
  45. # 获取查询结结果,:tuple 类型注解标记这个results变量是个元组(不是强制性的,只看给我们开发者自己看的)
  46. results:tuple = curses.fetchall()
  47. # 遍历results元组把数据保存到本地文件
  48. for i in results:
  49. # 案例要求的数据格式是字典,这里把数据格式转换成字典:{'date:2011-02-28, order_id:7726afdc-c05e-4f4d-8f4d-376dc6d24522, money: 1920, province: 河南省'}
  50. dict_item = {f"date:{i[0]}, order_id:{i[1]}, money: {i[2]}, province: {i[3]}"}
  51. f.write(f'{dict_item}\n') # write() 文件写入,这个写入方法要求的数据格式是字符串, \n 让文件内容换行
  52. f.close() # 关闭文件
  53. # 关闭到数据库的链接
  54. conn.close()

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号