【Python】进阶之 MySQL入门教程

news2024/11/24 20:37:28

文章目录

  • 数据库概述
  • 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 pymysql
    
    try:
        # 2. 连接mysql数据库的服务
        conn = pymysql.Connect(
            # mysql服务端的IP,默认127.0.0.1/localhost,也可填真实ip
            host='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. 使用游标对象去调用sql
        cur.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,也可填真实ip
        host='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. 使用游标对象执行sql
        cur.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 pymysql
      
      def 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表的所有数据SQL
              sql = 'select * from orders;'
              # 5 使用游标对象执行SQL
              cur.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 pymysql
      
      def 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 编写 增加数据的SQL
              sql = '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 使用游标对象执行SQL
              cur.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 使用游标对象执行SQL
              cur.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.coloradmin.cn/o/879315.html

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

相关文章

生成式 AI 在泛娱乐行业的应用场景实践 – 助力风格化视频内容创作

感谢大家阅读《生成式 AI 行业解决方案指南》系列博客&#xff0c;全系列分为 4 篇&#xff0c;将为大家系统地介绍生成式 AI 解决方案指南及其在电商、游戏、泛娱乐行业中的典型场景及应用实践。目录如下&#xff1a; 《生成式 AI 行业解决方案指南与部署指南》《生成式 AI 在…

ios swift5 collectionView 瀑布流(两列)

文章目录 1.瀑布流1.1 demo地址1.2 记得把部署的最低版本由8改成11,13甚至更高。不然编译会报错 2.动态计算图片和文字的高度 1.瀑布流 1.1 demo地址 CollectionViewWaterfallLayout - github 1.2 记得把部署的最低版本由8改成11,13甚至更高。不然编译会报错 2.动态计算图片和…

Fiddler模拟请求发送和修改响应数据

fiddler模拟伪造请求 方法一&#xff1a;打断点模拟HTTP请求 1、浏览器页面填好内容后&#xff08;不要操作提交&#xff09;&#xff0c;打开fiddler&#xff0c;设置请求前断点&#xff0c;点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在…

3.文件目录

第四章 文件管理 3.文件目录 ​   对于D盘这个根目录来说它对应的目录文件就是图中的样子&#xff0c;其实就是用一个所谓的目录表来表示这个目录下面存放了哪些东西。在D盘中的每一个文件&#xff0c;每一个文件夹都会对应这个目录表中的一个表项&#xff0c;所以其实这些一…

魔改 axuanup 的 aardio和python 猜拳游戏 代码

根据 axuanup 的 aardio和python 猜拳游戏 代码&#xff0c;魔改了一个风格不一样的代码。 争取做到代码尽量“简”&#xff0c;但还没到“变态简”的程度&#xff0c;因为还能看懂。 原文&#xff1a;aardio和python 猜拳游戏-自由交流乐园-Aardio资源网 代码如下&#xff…

Java课题笔记~ 过滤器

概念 过滤器&#xff1a;顾名思义&#xff0c;就是在源数据和目的数据之间起过滤作用的中间组件。 过滤器可以动态地拦截请求和响应&#xff0c;以变换或使用包含在请求或响应中的信息。 filter是对客户端访问资源的过滤&#xff0c;符合条件放行&#xff0c;不符合条件不放…

使用VLC轻松体验本地视频推流、拉流、播放功能

VLC 前言一、VLC是什么&#xff1f;二、VLC推流&#xff08;服务器推流&#xff09;VLC客户端拉流参考 前言 本章主要讲解如何通过VLC开源免费工具对本地视频实现推流、拉流、播放演示。 一、VLC是什么&#xff1f; VLC 是一款自由、开源的跨平台多媒体播放器及框架&#xf…

.netcore grpc双向流方法详解

一、双向流处理概述 简单来讲客户端可以向服务端发送消息流&#xff0c;服务端也可以向客户端传输响应流&#xff0c;即客户端和服务端可以互相通讯客户端无需发送消息即可开始双向流式处理调用 。 客户端可选择使用 RequestStream.WriteAsync 发送消息。 使用 ResponseStream…

new BigDecimal(double val)注意事项 / JWT解析BigDecimal类型数据

前言&#xff1a; 公司项目中有一个板块需要解析JWT令牌获取载荷里面封装的数据&#xff0c;遇到要解析一个BigDecimal类型的数据 问题发现过程&#xff1a; 正常来说&#xff0c;我们解析一个JWT令牌的步骤如下&#xff1a; public static Claims getDataFromToken(String tok…

python 多个字符替换为一个字符(简洁代码)

在windows系统当中的文件命名&#xff0c;有些特殊字符是不能存在&#xff0c;下面我们来看一下哪些字符不能存在。 文件名称中不能包含\ / : * ? " < > |一共9个特殊字符 一开始想用replace()替换&#xff0c;但是要处理多个字符&#xff0c;写起来代码不整洁 每次…

k8s认证详解 k8s证书详解 2023推荐

推荐阅读 https://www.yii666.com/blog/478731.html?actiononAll 在 Kube-apiserver 中提供了很多认证方式&#xff0c;其中最常用的就是 TLS 认证&#xff0c;当然也有 BootstrapToken&#xff0c;BasicAuth 认证等&#xff0c;只要有一个认证通过&#xff0c;那么 Kube-api…

Jupyter并发测试以后出现EOFError marshal data too short

Jupyter 并发测试以后出现EOFError: marshal data too short 背景 由于项目需求需要用户能进行网页在线运行python代码程序&#xff0c;调研后决定使用Jupyter的服务接口实现此功能&#xff0c;目前使用docker进行容器化部署&#xff0c;测试针对次服务进行并发测试。测试并发…

tkinter的Frame控件

文章目录 Frame和LabelFrame控件Frame参数LabelFrame参数 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框&#x1f48e;文件对话框Frame控件&#x1f48e;PanedWindow和notebook控件扫雷小游戏&#x1f48e…

K8S系列二:实战入门

I. 配置kubectl 1.1 什么是kubectl&#xff1f; 官方文档中介绍kubectl是&#xff1a; Kubectl 是一个命令行接口&#xff0c;用于对 Kubernetes 集群运行命令。Kubectl的配置文件在$HOME/.kube目录。我们可以通过设置KUBECONFIG环境变量或设置命令参数–kubeconfig来指定其他…

Android布局【LinearLayout】

文章目录 常见属性orientation的选择项解释项目结构主要代码 常见属性 orientation&#xff1a;布局中组件的排列方式gravity&#xff1a;控制组件所包含的子元素的对齐方式&#xff0c;可多个组合layout_gravity&#xff1a;控制该组件在父容器里的对齐方式background&#x…

Verdi_如何dump信号的驱动强度

Verdi_如何dump信号的驱动强度 需求背景 在Verilog语法标准中&#xff0c;0和1各自被分成了8个强度等级&#xff1b; Strength NameStrength NameStrength Levelsupply 0supply 17strong 0strong 16pull 0pull 15large 0large 14weak 0weak 13medium 0medium 12small 0small…

k8s 自身原理 5

我们知道容器是通过 pod 来承载的&#xff0c;我们在 k8s 中&#xff0c;服务都是跑在 pod 里面的&#xff0c;pod 里面可以跑 1 个容器&#xff0c;或者跑多个容器&#xff0c;那么咱们 pod 里面跑 1 个服务容器&#xff0c;咱真的就以为里面就只有这样个容器吗&#xff1f; …

替代阿托斯DLKZOR-T/DLHZO-TES直动式伺服阀比例阀

DLKZOR-T/DLKZOR-TES直动式伺服阀比例阀结构&#xff1a; 1&#xff0c;LVDT传感器 2&#xff0c;比例电磁铁 3&#xff0c;阀体 4&#xff0c;阀套 5&#xff0c;阀芯 6&#xff0c;复位弹簧 7&#xff0c;集成数字放大器 8&#xff0c;七芯插头 9&#xff0c;RS232通…

Python学习笔记_基础篇(二)_数据类型之字符串

一.基本数据类型 整数&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一个tab键) 布尔值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的数据类型都存在想对应…

synchronized锁膨胀、锁升级、锁优化的过程

参考文章 Java中的偏向锁&#xff0c;轻量级锁&#xff0c; 重量级锁解析_萧萧九宸的博客-CSDN博客 本文是本人对以上文章的整理&#xff0c;建议先去看以上文章。 在Java中&#xff0c;一个锁对象的四种状态: 无锁偏向锁轻量级锁重量级锁 在Java中&#xff0c;一个锁就是一…