【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是最流行的关系型数据库管理系统中的一个。

  • 关系型数据库管理系统可以分为:

    1. 关系型数据库服务端软件-Server
    2. 关系型数据库客户端软件-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
    delete
    DDL数据定义语句creat
    drop
    TPL事务处理语言begin transaction
    commit
    rollback
    DCL数据控制语言grant
    revoke
  • MySQL的特点

    1. MySQL是开源的,所以你不需要支付额外的费用。
    2. M小ySQL支持大型的数据库。可以处理拥有上干万条记录的大型数据库。
    3. MySQL使用标准的SQL数据语言形式。
    4. 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的配置文件
    1. mqsql配置文件的路径:/etc/mysql/mysql.conf.d/
      在这里插入图片描述
    2. 配置项介绍
      <1> port表示端口,默认为3306;
      <2> bind-address表示服务器绑定的ip,默认为127.0.0.1;
      <3> datadir表示数据库保存路径,默认为/var/lib/mysql;
      <4> log_error表示错误日志,默认为/var/log/mysql/error.log;

Navicat安装和使用

  • Navicat介绍
    Navicat是一款图形化界面的数据库客户端软件。
  • Navicat的安装——基于Linux操作系统
    1. 官网下载安装包:https://www.navicat.com.cn
    2. 解压navicat安装包:tar -zxvf navicat112_mysql_cs_x64.tar.gz
    3. cd到navicat安装包文件夹目录:cd navicate112_mysql_cs_x64
    4. 运行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操作
    1. 查询数据
      查询所有列:select * from 表名;
      查询指定列:select 列名1, 列名2,... from 表名;
      在这里插入图片描述
    2. 增加数据
      全列插入 - 值的顺序必须和字段顺序完全一致:insert into 表名 values(...);
      部分列插入 - 值的顺序和给出的列的顺序对应:insert into 表名(列1, 列2,...) values(值1, 值2,...)
      全列多行插入:insert into 表名 values(...), (...), (...);
      部分列多行插入:insert into 表名(列1, 列2,...) values(值1,...), (值1,...), (值1,...)
      在这里插入图片描述
    3. 修改数据update 表名 set 列1=值1, 列2=值2,... where 条件;
      在这里插入图片描述
    4. 删除数据delete from 表名 where 条件;
      在这里插入图片描述
  • Mysql数据库备份和恢复
    1. 备份导出:mysqldump -u用户名 -p密码 数据库名 表名 > data.sql (注意:不写表名默认导出所有数据表)
      在这里插入图片描述

    2. 恢复导入:

      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的使用

    1. 导包:import pymysql
    2. 创建和mysql服务端的连接对象:conn = pymysql.connect(参数列表)
    3. 获取游标对象:cursor = conn.cursor()
    4. 执行sql语句:row_count = cursor.execute(sql)
    5. 获取查询结果集:result = cursor.fetchall()
    6. 将增加和修改操作提交到数据库:conn.commit()
    7. 回滚数据:conn.rollback()
    8. 关闭游标对象:cursor.close()
    9. 关闭连接: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交互
    ⑤ 查询订单数据
    ⑥ 增加订单数据
    ⑦ 删除订单数据
    ⑧ 修改订单数据

  • 实现步骤

    1. 建库和建表

      --创建数据库
      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);
      
    2. 插入测试数据
      ① cd素材的目录下
      ② 登录mysql客户端:mysql -uroot -p
      ③ 切换数据库: use orders
      ④ 导入测试数据:source orders.sql
      在这里插入图片描述

    3. 实现订单查询功能
      ① 导包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()
      
    4. 实现订单增加功能
      ① 导包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()
      
    5. 实现封装功能函数
      查询和增加的功能重复度比较高,均有:导包、连接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)
      
    6. 实现订单修改和删除功能

      # 修改的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)
      

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

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

相关文章

IDEA 设置字体大小无效

设置字体大小&#xff0c;一般都是从file>settings>editor>font>Size里设置&#xff0c;一般都有效。 但是&#xff0c;如果是更换了主体&#xff0c;则需要从主体颜色菜单那里这是&#xff0c;你看这个页面&#xff0c;上面黄色三角也提示你了&#xff0c;要去颜色…

SpringBoot中间件使用之EventBus、Metric、CommandLineRunner

1、EventBus 使用EventBus 事件总线的方式可以实现消息的发布/订阅功能&#xff0c;EventBus是一个轻量级的消息服务组件&#xff0c;适用于Android和Java。 // 1.注册事件通过 EventBus.getDefault().register(); // 2.发布事件 EventBus.getDefault().post(“事件内容”); …

支持对接鸿蒙系统的无线模块及其常见应用介绍

近距离的无线通信得益于万物互联网的快速发展&#xff0c;基于集成部近距离无线连接&#xff0c;为固定和移动设备建立通信的蓝牙技术也已经广泛应用于汽车领域、工业生产及医疗领域。为协助物联网企业终端产品能快速接入鸿蒙生态系统&#xff0c;SKYLAB联手国产芯片厂家研发推…

找不到mfc140u.dll怎么办?mfc140u.dll丢失怎样修复?简单三招搞定

最近我遇到了一个问题&#xff0c;发现我的电脑上出现了mfc140u.dll文件丢失的错误提示。这个错误导致一些应用程序无法正常运行&#xff0c;让我感到非常困扰。经过一番研究和尝试&#xff0c;我终于成功修复了这个问题&#xff0c;并从中总结出了一些心得。 mfc140u.dll丢失原…

财报解读:继续押注Disney+,迪士尼距离盈利还有多远?

迪士尼最新一季的“答卷”&#xff0c;透露着不小的寒气。 近日&#xff0c;迪士尼披露了2023财年第三季度&#xff08;自然年2023年Q2&#xff09;业绩报告&#xff0c;营收223.3亿美元&#xff0c;同比仅增长4%&#xff0c;低于市场预期的225.1亿美元&#xff1b;归母净亏损…

【人工智能前沿弄潮】——生成式AI系列:Diffusers应用 (2) 训练扩散模型(无条件图像生成)

无条件图像生成是扩散模型的一种流行应用&#xff0c;它生成的图像看起来像用于训练的数据集中的图像。与文本或图像到图像模型不同&#xff0c;无条件图像生成不依赖于任何文本或图像。它只生成与其训练数据分布相似的图像。通常&#xff0c;通过在特定数据集上微调预训练模型…

数学运算1

正确答案&#xff1a;F 你的答案&#xff1a;E 参考答案&#xff1a;最大排列为100 1 99 2 98 3…51 49 50 所以和为999897…1(100-50)因为是一个圈所以&#xff0c;100和50相接&#xff0c;所以等于5000 知识点&#xff1a;数学运算

MySQL 慢查询探究分析

目录 背景&#xff1a; mysql 整体结构&#xff1a; SQL查询语句执行过程是怎样的&#xff1a; 知道了mysql的整体架构&#xff0c;那么一条查询语句是怎么被执行的呢&#xff1a; 什么是索引&#xff1a; 建立索引越多越好吗&#xff1a;   如何发现慢查询&#xff1…

树结构--介绍--二叉树遍历的递归实现

目录 树 树的学术名词 树的种类 二叉树的遍历 算法实现 遍历命名 二叉树的中序遍历 二叉树的后序遍历 二叉树的后序遍历迭代算法 二叉树的前序遍历 二叉树的前序遍历迭代算法 树 树是一种非线性的数据结构&#xff0c;它是由n(n≥0)个有限节点组成一个具有层次关系…

Docker安装 elasticsearch-head

目录 前言安装elasticsearch-head步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取elasticsearch-head镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#…

项目经理的会议之道:全参与还是精选参与?

引言 在项目管理中&#xff0c;会议是一个常见的工具&#xff0c;用于沟通信息、解决问题、做出决策等。然而&#xff0c;项目经理是否需要参加所有的会议呢&#xff1f;这是一个值得深思的问题。作为项目经理&#xff0c;我们需要权衡会议的重要性和我们的时间管理。我们不能…

【第一阶段】kotlin的函数

函数头 fun main() {getMethod("zhangsan",22) }//kotlin语言默认是public,kotlin更规范&#xff0c;先有输入&#xff08; getMethod(name:String,age:Int)&#xff09;再有输出(Int[返回值]) private fun getMethod(name:String,age:Int): Int{println("我叫…

Playwright快速上手-1

前言 随着近年来对UI自动化测试的要求越来越高&#xff0c;,功能强大的测试框架也不断的涌现。本系列主讲的Playwright作为一款新兴的端到端测试框架,凭借其独特优势,正在逐渐成为测试工程师的热门选择。 本系列文章将着重通过示例讲解 Playwright python开发环境的搭建 …

Linux Day07

一、僵死进程 1.1僵死进程产生的原因 子进程先于父进程结束, 而父进程没有获取子进程退出码&#xff0c;释放子进程占用的资源&#xff0c;此时子进程将成为一个僵死进程。 在第一个框这里时父进程子进程都没有结束&#xff0c;显示其pid 父进程是2349&#xff0c;子进程是235…

【Nginx】Nginx网站服务

国外主流还是使用apache&#xff1b;国内现在主流是nginx&#xff08;并发能力强&#xff0c;相对稳定&#xff09; nginx&#xff1a;高性能、轻量级的web服务软件 特点&#xff1a; 1.稳定性高&#xff08;没apache稳&#xff09;&#xff1b; 2.系统资源消耗比较低&#xf…

判断链表有环的证明

目录 1.问题 2.证明 3.代码实现 1.问题 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用…

TansUNet代码理解

首先通过论文中所给的图片了解网络的整体架构&#xff1a; vit_seg_modeling部分 模块引入和定义相关量&#xff1a; # codingutf-8 # __future__ 在老版本的Python代码中兼顾新特性的一种方法 from __future__ import absolute_import from __future__ import division fr…

新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元

伦敦, 8月14日 - 在英国伦敦隆重的Raffles OWO举办的欧盟数字超算新时代战略合作签约仪式&#xff0c;CosmosAI、Infinite Money Fund与Internet Research Lab三方强强联手&#xff0c;达成了历史性的合作协议&#xff0c;共同迈向超算租赁新纪元。 ​ 这次跨界的合作昭示了全球…

VR家装提升用户信任度,线上体验家装空间感

近些年&#xff0c;VR家装逐渐被各大装修公司引入&#xff0c;VR全景装修的盛行&#xff0c;大大增加了客户“所见即所得”的沉浸式体验感&#xff0c;不再是传统二维平面的看房模式&#xff0c;而是让客户通过视觉、听觉、交互等功能更加真实的体验家装后的效果。 对于传统家装…

BUUCTF 还原大师 1

题目描述&#xff1a; 我们得到了一串神秘字符串&#xff1a;TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母&#xff0c;为了确定这个神秘字符串&#xff0c;我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全&#xff0c;E903???4D…