Python - SQL入门和实战

news2025/1/12 10:55:07

数据来源

 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()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

七、标签传播与节点分类【CS224W】(Datawhale组队学习)

开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w 文章目录半…

或许你想要的画图工具在这里

之前文章发布后,有小伙伴问下面的画怎么画的(偷偷告诉你,其实我是用铅笔水彩笔画的),哈哈,开玩笑了。其实这些图都是用Excalidraw 画出来的。 我们平常不管是工作中,还是在日常写文章&#x…

pdf压缩文件大小的方法是什么?word文件怎么批量转换成pdf格式?

大家在存储文件时,通常会遇到一些较大的文件,这时需要对其进行压缩处理。下面介绍一下如何压缩PDF文件大小以及批量转换Word文件为PDF格式。pdf压缩文件大小的方法是什么?1.打开小圆象PDF转换器,选择“PDF压缩”功能。2.在“PDF压缩”界面中…

二、CSS

一、CSSHTML的结合方式 1、第一种&#xff1a;在标签的style属性上设置"key:value value;"&#xff0c;修改标签样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>…

8位单片机(51 STC8)C语言处理32位unsigned long型数据之计算出错

一、问题描述 入门51没多久后就主攻32了&#xff0c;最近又搞起51&#xff0c;移植一个软定时器代码到STC8上&#xff0c;结果出现了奇怪的问题&#xff0c;而这种问题在各种32位单片机上都是不曾有的。 有如下代码&#xff0c;实现了软定时器。使用内部IRC&#xff0c;22.1184…

LabVIEW与Web通讯

LabVIEW与Web通讯Web客户端可通过LabVIEWWeb服务与远程LabVIEW应用程序交换数据。Web服务由运行在服务器上的VI和其他文件组成&#xff0c;这些VI对应于客户端发出的HTTP请求。LabVIEWWeb服务仅在LabVIEW完整版开发系统和LabVIEW专业版开发系统中可用。Web服务用于下列情况&…

服务器、存储、数据保护……又把奖拿了个遍

新一代高端存储      新一代中端存储      新一代入门级存储      新的数据保护产品线      新一代服务器和边缘服务器新品      … …      戴尔科技集团      在过去一年      继续保持强劲研发创新势头      不仅在硬件层面持续升级  …

NXP iMX8系列处理器Pin Multiplexing定义说明

By Toradex秦海1). 简介为了提高处理器的设计灵活性和可用性&#xff0c;NXP的所有i.MX系列处理器都配备了基于 IOMUX Controller (IOMUXC)和IOMUX来使能Pin Mux功能&#xff0c;使得一个特定的IO管脚可以选择不同的可能多达8种的功能定义模块(ALT0, ALT1, ALT2, ALT3...)&…

YOLOv5全面解析教程⑤:计算mAP用到的Numpy函数详解

作者 | Fengwen、BBuf 本文主要介绍在One-YOLOv5项目中计算mAP用到的一些numpy操作&#xff0c;这些numpy操作使用在utils/metrics.py中。本文是《YOLOv5全面解析教程④&#xff1a;目标检测模型精确度评估》的补充&#xff0c;希望能帮助到小伙伴们。 欢迎Star、试用One-YOLOv…

openpnp - configure - 主次基准点矫正

文章目录openpnp - configure - 主次基准点矫正概述备注ENDopenpnp - configure - 主次基准点矫正 概述 查找问题, 视觉里程碑只剩下4个问题了. 先看下设备上的主校准点, 我设备上的主校准点在设备前部的一个铝合金块上, 一块只带一个mark点的小PCB, 两边用螺丝拧住了.比PCB…

(五十四)大白话索引的页存储物理结构,是如何用B+树来实现的?.md

上一次我们给大家说了主键索引的目录结构&#xff0c;只要在一个主键索引里包含每个数据页跟他最小主键值&#xff0c;就可以组成一个索引目录&#xff0c;然后后续你查询主键值&#xff0c;就可以在目录里二分查找直接定位到那条数据所属的数据页&#xff0c;接着到数据页里二…

腾讯云轻量应用服务器配置表汇总(2核2G/2核4G/4核8G/8核16G)

轻量应用服务器&#xff08;TencentCloud Lighthouse&#xff09;是新一代开箱即用、面向轻量应用场景的云服务器产品&#xff0c;助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、APP、电商应用、云盘/图床和开发测试环境&#xff0c;相比普通云服务器…

我的 System Verilog 学习记录(7)

引言 本文简单介绍 SystemVerilog 语言的 testbench 组件间通信和数据交互。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff…

使用msvc命令行或msbuild编译dx3程序

从这里下载&#xff1a;https://github.com/microsoft/DirectX-Graphics-Samples cl.exe /D "UNICODE" /D "_UNICODE" *.cpp /EHsc -I C:\Users\54930\Downloads\DirectX-Graphics-Samples-master\Samples\Desktop\D3D12nBodyGravity\src\WinPixEventRun…

为什么DNS安全很重要

几乎所有web流量都需要标准DNS查询&#xff0c;这为DNS攻击创造了机会&#xff0c;比如DNS劫持和中间人攻击。这些攻击可以将网站的入站流量重定向到网站的伪造副本&#xff0c;收集敏感用户信息&#xff0c;并使企业承担重大责任。目前防范DNS威胁的最普遍方法之一是采用DNSSE…

为什么地图可视化炙手可热?

我们在谈到数据可视化的时候&#xff0c;可能第一反应就是中间有一个地图样式的大屏图。但有没有想过&#xff0c;为什么大多数的可视化大屏中间都是一张地图的样子&#xff1f;这张地图样式的模块究竟是什么呢&#xff1f;它又是怎么做出来的&#xff1f; 其实这张地图样式的…

Linux基本命令复习-面试急救版本

1、file 通过探测文件内容判断文件类型&#xff0c;使用权是所有用户&#xff0c; file[options]文件名2、mkdir/rmdir 创建文件目录&#xff08;文件夹&#xff09;/删除文件目录 3、grep 指定文件中搜索的特定内容 4、find 通过文件名搜索文件 find name 文件名 5、ps 查…

电子科技大学 高级计算机系统结构 考试回忆

首先题量不算小&#xff0c;因此没有太多时间把题都记出来&#xff0c;但是叙述一下题的类型希望能帮到以后选了这门课大家&#xff0c;在网上确实没有搜到这门课有关考试的任何资料&#xff0c;所以我也没啥参考全凭记忆和老师的PPT结合。复习的时候老师给了大纲&#xff0c;就…

mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题

一、事故还原 我们仍然使用学生信息表&#xff0c;但是我们只需要保留两个字段即可&#xff1a; CREATE TABLE student_info (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,name varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT 姓名, PRIMARY KEY (id) ) ENGINEIn…

挑战图像处理100问(26)——双线性插值

双线性插值是一种常用的图像插值方法&#xff0c;用于将低分辨率的图像放大到高分辨率。它基于一个假设&#xff1a;在两个相邻像素之间的值是线性的。 双线性插值考察444邻域的像素点&#xff0c;并根据距离设置权值。虽然计算量增大使得处理时间变长&#xff0c;但是可以有效…