【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.pswp.cn/news/36686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA 設置字體大小無效

設置字體大小&#xff0c;一般都是從file>settings>editor>font>Size里設置&#xff0c;一般都有效。 但是&#xff0c;如果是更換了主體&#xff0c;則需要從主體顏色菜單那里這是&#xff0c;你看這個頁面&#xff0c;上面黃色三角也提示你了&#xff0c;要去顏色…

學習筆記整理-DOM-03-定時器

一、定時器 1. setInterval()函數 setInterval()函數可以重復調用一個函數&#xff0c;在每次調用之間具有固定的時間間隔。 setInterval(function () { // 這個函數將自動被以固定間隔時間調用 }, 2000);第一個參數是函數第二個參數是間隔時間&#xff0c;以毫秒為單位&…

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

1、EventBus 使用EventBus 事件總線的方式可以實現消息的發布/訂閱功能&#xff0c;EventBus是一個輕量級的消息服務組件&#xff0c;適用于Android和Java。 // 1.注冊事件通過 EventBus.getDefault().register(); // 2.發布事件 EventBus.getDefault().post(“事件內容”); …

深入理解spring面經

1 了解SpringMVC的處理流程嗎&#xff1f; 用戶發送請求至前端控制器DispatcherServlet。DispatcherServlet通過處理器映射器HandlerMapping找到對應的處理器。DispatcherServlet將請求提交給對應的處理器Controller。Controller處理完請求后返回ModelAndView。DispatcherServ…

面試攻略,Java 基礎面試 100 問(十三)

什么時候用 assert&#xff1f; assertion(斷言)在軟件開發中是一種常用的調試方式&#xff0c;很多開發語言中都支持這種機制。一般來說&#xff0c;assertion 用于保證程序最基本、關鍵的正確性。assertion 檢查通常在開發和測試時開啟。為了提高性能&#xff0c;在軟件發布…

支持對接鴻蒙系統的無線模塊及其常見應用介紹

近距離的無線通信得益于萬物互聯網的快速發展&#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;通過在特定數據集上微調預訓練模型…

OpenLayers入門,OpenLayers入門文檔,OpenLayers入門手冊,OpenLayers相比其他地圖引擎有哪些優點?

專欄目錄&#xff1a; OpenLayers入門教程匯總目錄 前言 在學習OpenLayers之前&#xff0c;總是需要了解OpenLayers&#xff0c;知道OpenLayers是什么&#xff0c;OpenLayers能夠做什么&#xff0c;OpenLayers有哪些用途和特性&#xff0c;然后OpenLayers相比其他地圖引擎又有…

數學運算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&#…

SpringBoot復習:(28)【前后端不分離】自定義View

一、自定義View package cn.edu.tju.view;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Comp…

C# --- Case Study

C# --- Case Study C# — Mongo數據庫事務的應用 C# — 如何解析Json文件并注入MongoDB C# — MongoDB如何安全的替換Collection

百度翻譯API整合SpringBoot

案例背景,按照官方給的Demo,實在是太啰嗦了, 大致步驟 封裝數據>簽名>發送請求, 仔細一看劈里啪啦一大堆,最后還要手動關流關連接,難道整合到SpringBoot項目里面我還得為內存管理考慮 所以就有了如下需求 使用 RestTemplate的對象進行發送請求數據,RestTemplate由s…

Redis緩存刪除略和內存淘汰策略及LRU

1、Redis內存若在配置文件中未設置&#xff0c;內存會無限制增長&#xff0c;直到超出物理內存&#xff0c;拋出out of memory內存耗盡異常 解決方法&#xff0c;調整maxmemory參數&#xff0c;一般設置為物理內存的3/4&#xff0c;并且添加緩存刪除策略 2、Redis對于設置了過…

項目經理的會議之道:全參與還是精選參與?

引言 在項目管理中&#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("我叫…