【Python】进阶之 MySQL入门教程
文章目录
- 数据库概述
- Mysql概述
- Mysql安装与使用
- Navicat安装和使用
- Mysql终端指令操作
- Mysql和python交互
- 订单管理案例实现
数据库概述
-
数据库的由来
发展历程 说明 人工管理阶段 用纸带等进行数据的存储 文件系统阶段 数据存储在文件中 数据库阶段 解决了文件系统问题 高级数据库阶段 分布式数据库 -
数据库的分类
数据库分类 说明 常用库 关系型数据库 采用了关系模型来组织数据的数据库:关系模型指的就星二维表格模型 Oracle
Microsoft SQL Server
MySQL
SQLite非关系型数据库 Not Only SQL
强调Key-Value的方式存储数据Mongodb
redis -
关系型数据库的使用场景
Web网站系统、日志记录系统、数据仓库系统、嵌入式系统
Mysql概述
MySQL是一个 关系型数据库管理系统 \color{red}{关系型数据库管理系统} 关系型数据库管理系统软件。
-
关系型数据库管理系统-RDBMS
MySQL是一个关系型数据库管理系统软件,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System, 关系数据库管理系统)应用软件,它是由瑞典MySQL AB司开发,目前属于Oracle旗下产品,MySQL是最流行的关系型数据库管理系统中的一个。 -
关系型数据库管理系统可以分为:
- 关系型数据库服务端软件-Server
- 关系型数据库客户端软件-Client
-
关系型数据库管理系统的流程图:

-
关系型数据库管理系统的通信流程效果图:

-
SQL介绍
SQL(Structured Query Language)是 结构化查询语言 \color{red}{结构化查询语言} 结构化查询语言,是一种用来操作 R D B M S \color{red}{RDBMS} RDBMS的数据库的语言,也就是说通过SQL可以操作oracle, sql server, mysql, sqlite等关系型的数据库。 -
SQL语言的分类
简写 语义 说明 DQL 数据查询语句 select DML 数据操作语句 insert
update
deleteDDL 数据定义语句 creat
dropTPL 事务处理语言 begin transaction
commit
rollbackDCL 数据控制语言 grant
revoke -
MySQL的特点
- MySQL是开源的,所以你不需要支付额外的费用。
- M小ySQL支持大型的数据库。可以处理拥有上干万条记录的大型数据库。
- MySQL使用标准的SQL数据语言形式。
- MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口。这些编程语言包括C、C++、Python、Java、Ruby等等。
-
MySQL的数据类型
数据类型 说明 int, bit 整数 decimal 小数 varchar, char 字符串 date, time, datetime 日期和时间 enum 枚举类型 -
MySQL的字段约束
约束参数 说明 primary key 主键约束 not null 非空约束 unique 唯一约束 default 默认约束
Mysql安装与使用
- Mysql安装
MySQL数据库 服务 \color{red}{服务} 服务端软件的安装:sudo apt-get install mysql-server
MySQL数据库 客户 \color{red}{客户} 客户端软件的安装:sudo apt-get insatll mysql-client - Mysql数据库服务端启动
查看MySQL服务状态:sudo service mysql status
停止MySQL服务:sudo service mysql stop
启动MySQL服务:sudo service mysql start
重启MySQL服务:sudo service mysql restart - Mysql的配置文件
- mqsql配置文件的路径:/etc/mysql/mysql.conf.d/

- 配置项介绍
<1> port表示端口,默认为3306;
<2> bind-address表示服务器绑定的ip,默认为127.0.0.1;
<3> datadir表示数据库保存路径,默认为/var/lib/mysql;
<4> log_error表示错误日志,默认为/var/log/mysql/error.log;
- mqsql配置文件的路径:/etc/mysql/mysql.conf.d/
Navicat安装和使用
- Navicat介绍
Navicat是一款图形化界面的数据库客户端软件。 - Navicat的安装——基于Linux操作系统
- 官网下载安装包:https://www.navicat.com.cn
- 解压navicat安装包:
tar -zxvf navicat112_mysql_cs_x64.tar.gz - cd到navicat安装包文件夹目录:
cd navicate112_mysql_cs_x64 - 运行navicat:
./start_navicat
安装包及破解工具下载: 百度网盘 【提取码:4KaE】
破解教程:Navicat Premium15永久破解版安装教程 - Navicat的连接mysql服务

Mysql终端指令操作
- Mysql登录登出客户端
连接mysql服务端指令:mysql -uroot -p
显示当前时间:select now();
退出连接:exit/quit/[control+d]

- Mysql数据库操作
查看所有数据库:show databases;
创建数据库:create database 数据库名 charset=utf-8;
使用数据库:use 数据库名;
查看当前使用的数据库:select database();
删除数据库:drop database 数据库名;

- Mysql表操作
查看所有当前库中的所有表:show tables;
创建表:create table 表名(字段名称 数据类型 可选的约束条件, column1 datatype contral, ...);
修改表字段类型:alter table 表名 modify 列名 类型 约束;
删除表:drop table 表名;
查看表结构:desc 表名;

- Mysql -CRUD操作
- 查询数据
查询所有列:select * from 表名;
查询指定列:select 列名1, 列名2,... from 表名;

- 增加数据
全列插入 - 值的顺序必须和字段顺序完全一致:insert into 表名 values(...);
部分列插入 - 值的顺序和给出的列的顺序对应:insert into 表名(列1, 列2,...) values(值1, 值2,...)
全列多行插入:insert into 表名 values(...), (...), (...);
部分列多行插入:insert into 表名(列1, 列2,...) values(值1,...), (值1,...), (值1,...)

- 修改数据:
update 表名 set 列1=值1, 列2=值2,... where 条件;

- 删除数据:
delete from 表名 where 条件;

- 查询数据
- Mysql数据库备份和恢复
-
备份导出:
mysqldump -u用户名 -p密码 数据库名 表名 > data.sql(注意:不写表名默认导出所有数据表)

-
恢复导入:
cd 到数据文件路径下 mysql -u用户名 -p密码 use 数据库 source data.sql
-
Mysql和python交互
-
pymysql的安装
安装pymysql:sudo pip3 install pymysql
查看安装情况:pip show pymysql / pip3 list
卸载pymysql:sudo pip3 uninstall pymysql

-
pymysql的使用
- 导包:
import pymysql - 创建和mysql服务端的连接对象:
conn = pymysql.connect(参数列表) - 获取游标对象:
cursor = conn.cursor() - 执行sql语句:
row_count = cursor.execute(sql) - 获取查询结果集:
result = cursor.fetchall() - 将增加和修改操作提交到数据库:
conn.commit() - 回滚数据:
conn.rollback() - 关闭游标对象:
cursor.close() - 关闭连接:
conn.close()
- 导包:
-
pymysql查询数据
# 查询数据库goods下student表中的所有数据 # 1. 导包 import pymysqltry:# 2. 连接mysql数据库的服务conn = pymysql.Connect(# mysql服务端的IP,默认127.0.0.1/localhost,也可填真实iphost='192.168.90.172',user='root',password='mysql',database='goods',port=3306,charset='utf8')# 3. 创建游标对象cur = conn.cursor()# 4. 编写sql语句sql = 'select * from students;'# 5. 使用游标对象去调用sqlcur.execute(sql)# 6. 获取查询的结果并打印result = cur.fetchall()print(result)# 7. 关闭游标对象cur.close()# 8. 关闭连接conn.close() except Exception as e:print(e)结果如下:

-
pymysql增删改数据
''' 对数据库goods下的students表进行如下操作: 1. 增加数据:李磊 35 男 2. 修改数据:李磊的名字改为王磊 3. 删除数据:王磊 '''# 1. 导包 import pymysql# 2. 连接mysql数据库的服务 conn = pymysql.Connect(# mysql服务端的IP,默认127.0.0.1/localhost,也可填真实iphost='192.168.90.172',user='root',password='mysql',database='goods',port=3306,charset='utf8' ) # 3. 创建游标对象 cur = conn.cursor() try:# 4. 编写增加、修改、删除的sql语句add_sql = 'insert into students values(%s, %s, %s, %s);'add_data = [0, '李磊', 35, '男']update_sql = 'update students set name=%s where name = "李磊";'update_data = ['王磊']delete_sql = 'delete from students where name=%s;'delete_data = ['王磊']# 5. 使用游标对象执行sqlcur.execute(add_sql, add_data)cur.execute(update_sql, update_data)cur.execute(delete_sql, delete_data)# 6. 提交操作conn.commit() except Exception as e:print(e)# 数据回滚conn.rollback() finally:# 7. 关闭游标对象cur.close()# 8. 关闭连接conn.close()
订单管理案例实现
-
需求分析

① 创建数据库orders
② 创建orders订单表
③ 插入测试数据orders.sql
④ Python和Mysql交互
⑤ 查询订单数据
⑥ 增加订单数据
⑦ 删除订单数据
⑧ 修改订单数据 -
实现步骤
-
建库和建表
--创建数据库 create database orders charset=utf8;--创建数据表 create table orders(id int not null auto_increment primary key,count int not null,price decimal(10,2) not null,freight decimal(10,2) not null,user varchar(50) not null,status enum('待支付','待发货','待收货') default '待支付' not null,time date not null); -
插入测试数据
① cd素材的目录下
② 登录mysql客户端:mysql -uroot -p
③ 切换数据库:use orders
④ 导入测试数据:source orders.sql

-
实现订单查询功能
① 导包pymysql
② 连接mysql服务
③ 创建游标对象
④ 编写查询所有订单SQL语句
⑤ 执行SQL语句
⑥ 获取所有查询的结果
⑦ 将获取结果转换成列表字典格式
⑧ 对Mysql的操作加Try处理# 1 导包 import pymysqldef order()# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQLsql = 'select * from orders;'# 5 使用游标对象执行SQLcur.execute(sql)# 6 获取查询的所有数据 fetchall() ==>元组result = cur.fetchall()print('查询数据:', result)# 打印结果如下:# 查询数据:((1, 2, Decimal('100.00'), Decimal('10.00'), '老王', ‘待收货', datetime.data(2020, 1, 1)), (2, 3, Decimal('200.00'), Decimal('25.00'), '钱红', ’待支付', datatime.date(2020, 4,1)))# 7 将数据转换成[{}, {}]data_lst = []for row in result:data_lst.append({'id': row[0],'count': row[1],'price': str(row[2]),'freight': str(row[3]),'user': row[4],'status': row[5],'time': str(row[6])})# 8 加个try优化下except Exception as e:print('报错信息:', e)finally:# 关闭游标对象cur.close()# 关闭连接conn.close() -
实现订单增加功能
① 导包pymysql
② 连接mysql服务
③ 创建游标对象
④ 编写增加订单的SQL语句
⑤ 执行SQL语句并提交
⑥ 对Mysql的操作加Try处理# 1 导包 import pymysqldef add(data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur =conn.cursor()try:# 4 编写 增加数据的SQLsql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)'# 5 使用游标对象执行SQL并提交cur.execute(sql, data)conn.commit()# 6 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close() -
实现封装功能函数
查询和增加的功能重复度比较高,均有:导包、连接mysql、创建游标对象、执行SQL语句、Try语句。实现封装函数的操作:
① 定义封装函数的名字
② 粘贴重复度高的代码
③ 提交参数
④ 测试# 1 导包 import pymysql# 封装一个执行CRUD的函数 def execute_crud_sql(sql,data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQL# 5 使用游标对象执行SQLcur.execute(sql, data)# 6 提交操作conn.commit()# 8 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close()def add(data):sql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)'execute_crud_sql(sql, data) -
实现订单修改和删除功能
# 修改的SQL语句 update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s; # 将参数中id的顺序从第一个颠倒到最后一个 data.append(data.pop(0))# 删除的SQL语句 delete from orders where id=%s;# 1 导包 import pymysql# 封装一个执行CRUD的函数 def execute_crud_sql(sql,data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQL# 5 使用游标对象执行SQLcur.execute(sql, data)# 6 提交操作conn.commit()# 8 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close()# 修改订单数据 def update(data):print('修改的数据:', data) # ['7', '99', '9.90', '1.00', '明明','待收货', '2020-03-29']data.append(data.pop(0))# 1. 修改的SQL语句sql = 'update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s'# 2. 执行调用execute_crud_sql(sql, data)# 删除订单数据 def delete(data):# 1. 删除的SQL数据sql = 'delete from orders where id=%s;'# 2. 执行execute_crud_sql(sql, data)
-
相关文章:
【Python】进阶之 MySQL入门教程
文章目录 数据库概述Mysql概述Mysql安装与使用Navicat安装和使用Mysql终端指令操作Mysql和python交互订单管理案例实现 数据库概述 数据库的由来 发展历程说明人工管理阶段用纸带等进行数据的存储文件系统阶段数据存储在文件中数据库阶段解决了文件系统问题高级数据库阶段分布式…...
Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法
Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法一、问题描述二、解决方法1.打开 WORD 2019,点击菜单中的“文件”;…...
三个整数排序
描述 给定三个整数,请将它们按从小到大的顺序输出。 输入 输入为一行,包含三个整数,用空格分隔。 输出 输出为一行,包含三个整数,用空格分隔,表示排序后的结果。 输入样例 1 9 3 7 输出样例 1 3 …...
Nginx反向代理出现错误 502 bad gateway 案例解析
场景描述 Nginx uwsgi flask Flask框架写的程序,使用uwsgi启动,Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长,会超过1分钟,在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误…...
截止到目前全量主体总数有多少?
企业主体类型 企业主体类型有很多种,一般我们会分为公司(有限责任)、合伙企业、个人独资企业、个体经营户这些类别。 今天我们按照企业,个体,组织的分类方式来看各个主体的总数。 企业:统一社会信用代码…...
HTTP--Request详解
请求消息数据格式 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1 请求头 客户端浏览器告诉服务器一些信息 请求头名称: 请求头值 常见的请求头: User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息 可…...
Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client
目录 一、linux posix线程相关函数介绍二、tcp server基础版本三、tpc服务端多线程版本四、tpc客户端代码tcp编程时, 一个server可以对应多个client, server端用多线程可以实现. linux下多线程可以使用POSIX的线程函数, 下面给出服务端和客户端的代码. 一、linux posix线程相关…...
如何构建一个 NodeJS 影院微服务并使用 Docker 部署
文章目录 前言什么是微服务?构建电影目录微服务构建微服务从 NodeJS 连接到 MongoDB 数据库总结 前言 如何构建一个 NodeJS 影院微服务并使用 Docker 部署。在这个系列中,将构建一个 NodeJS 微服务,并使用 Docker Swarm 集群进行部署。 以下…...
BEVFusion(ICRA-2023)--01
说明:论文 BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 原代码运行记录 原始环境:python 3.9 torch 1.12 (失败) 报错: python setup.py develop/mmdet3d/ops/ball_qu…...
Java——Iterator迭代器
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素ÿ…...
GCC编译过程:预处理->编译->汇编->链接
目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境(IDE)进行C语言编程时,点击"编译"按钮后,整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…...
JVM笔记 —— 出现内存溢出错误时时如何排查
一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError,前者是栈中出现溢出,后者一般是堆或方法区出现溢出,简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的,无…...
多级嵌套引入组件导致Vue提示子组件未注册问题
发生此问题的时候是页面解析的时报错的, 所以可以放在beforeCreate中执行注册组件这个时候是在页面运行时执行的,运行时编译就结束了 第一种:可以在父组件中动态注册组件 export default{beforeCreate(){//require是commonJS,commonJS导入ES…...
vue3+element-plus组件下拉列表,数组数据转成树形数据
引入组件 可以直接在项目中引入element-plus表格组件,如果需要变成下拉列表样式需要添加以下属性: row-key 必填 最好给数字或唯一属性 , 给每个节点设置id 不填的话 没有办法实现展开效果 load 这个是动态添加数据的 前提(开启…...
【kubernetes】调度约束
目录 调度约束 Pod 启动典型创建过程如下 调度过程 指定调度节点 查看详细事件(发现未经过 scheduler 调度分配) 获取标签帮助 需要获取 node 上的 NAME 名称 给对应的 node 设置标签分别为 ggls 和 gglm 查看标签 修改成 nodeSelector 调度方…...
【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文
论文:https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块(SLM) Experimental Res…...
jmeter通过BeanShell对接口参数进行MD5和HmacSHA256加密【杭州多测师_王sir】
一、在eclipse里面编写MD5加密算法 package com.Base64;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class Md5Utils {public static String md5(String sourceStr) {String result "";try {MessageDigest md Mess…...
基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Spring AOP 切点表达式
参考博客: 参考博客...
打破传统直播,最新数字化升级3DVR全景直播
导语: 近年来,随着科技的不断创新和发展,传媒领域也正经历着一场前所未有的变革。在这个数字化时代,直播已经不再仅仅是在屏幕上看到一些人的视频,而是将观众带入一个真实世界的全新体验。其中,3DVR全景直…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
