【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全景直…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
