mysql及python交互

来源:https://www.cnblogs.com/yudanqu/archive/2018/08/12/9464988.html
-Advertisement-
Play Games

mysql在之前寫過一次,那時是我剛剛進入博客,今天介紹一下mysql的python交互,當然前面會把mysql基本概述一下。 一、命令腳本 1、基本命令 (1)啟動服務 以管理員身份運行cmd net start 服務名稱 以管理員身份運行cmd net start 服務名稱 (2)停止服務 以管 ...


  mysql在之前寫過一次,那時是我剛剛進入博客,今天介紹一下mysql的python交互,當然前面會把mysql基本概述一下。

 

  目錄:
一、命令腳本(mysql)
    1、基本命令
    2、資料庫操作命令
    3、表操作命令
    4、數據操作命令
    5、查
    6、關聯
二、python交互
    1、資料庫連接
    2、創建資料庫表
    3、插入數據
    4、更新資料庫
    5、刪除數據
    6、資料庫查詢
三、mysql封裝(方便使用)
    1、python封裝的my_sql類
    2、案例(調用my_sql類)

 

一、命令腳本

1、基本命令

  (1)啟動服務

    • 以管理員身份運行cmd
    • net start 服務名稱

  (2)停止服務

    • 以管理員身份運行cmd
    • net stop 服務名稱

  (3)連接資料庫

    • 格式:mysql - u root - p ->輸入密碼

  (4)退出登錄(斷開連接)

    • exit或quit

  (5)查看版本(連接後可以執行)

    • select version()

  (6)顯示當前時間(連接後可以執行)

    • select now()

  (7)遠程連接

    • mysql - h ip地址 - u 用戶名 - p --->輸入對方mysql密碼

2、資料庫操作命令

  (1)創建資料庫

    • create database 資料庫名 charset = utf8

  (2)刪除資料庫

    • drop database 資料庫名

  (3)切換資料庫

    • use 資料庫名

  (4)查看當前選擇的資料庫

    • select database()

3、表操作命令

  (1)查看資料庫中所有表

    • show tables

  (2)創建表

    • create table 表名(列及類型)

    eg:create table student(id int auto_increment primary key,
               name varchar(20) not null)
    註:auto_increment 自增長      primary key 主鍵     not null 非空

  (3)刪除表

    • drop table 表名

  (4)查看表結構

    • desc 表名

  (5)查看建表語句

    • show create table 表名

  (6)重命名錶

    • rename table 原表名 to 新表名

  (7)修改表

    • alter table 表名 add | change | drop 列名

4、數據操作命令

  (1)增

    a、全列插入
      insert into 表名 values(...)
      eg:
      insert into student values(0, "tom", "北京")
      主鍵列是自動增長,但是在全列插入時需要占位,通常使用0,插入成功以後以實際數據為準
    b、預設插入
      insert into 表名(列1,列2..) values(值1,值2..)
    c、同時插入多條數據
      insert into 表名 values(...), (...), ...

  (2)刪

    delete from 表名 where 條件
    不寫條件則全刪

  (3)改

    update 表名 set 列1 = 值1, 列2 = 值2, ... where 條件

  (4)查

    查詢表中的全部數據
    select * from 表名

5、查

  (1)基本語法

    select * from 表名

      • from關鍵字後面是表名,表示數據來源於這張表
      • select後面寫表中的列名,如果是 * 表示在結果集中顯示表中額所有列
      • 在select後面的列名部分,可以使用as為列名起別名,這個別名顯示在結果集中
      • 如果要查詢多個列,之間使用逗號分隔

    # eg:select name as a,age from student;

  (2)消除重覆行

    在select後面列前面使用distinct可以消除重覆的行
    eg:select distinct gender from student

  (3)條件查詢

    a、語法
      select * from 表名 where 條件
    b、比較運算符
      等於(=) 大於(>) 小於(<) 大於等於(>=) 小於等於(<=) 不等於(!= 或 <>)
    c、邏輯運算符
      and or not
    d、模糊查詢
      like
      % 表示任意多個任意字元
      _ 表示一個任意字元
    e、範圍查詢
      in 表示在一個非連續的範圍內
      between。。。and。。。 表示在一個連續的範圍內
      eg:where id in (8, 10, 13)
    f、空判斷
      註意:null與""是不同的
      判斷空:is null
      判斷非空:is not null
    g、優先順序
      小括弧,not,比較運算符,邏輯運算符
      and比or優先順序高,同時出現並希望先選or,需要結合括弧來使用

  (4)聚合

    為了快速得到統計數,提供了5個聚合函數
    a、count(*) 表示計算總行數,括弧中可以寫 * 或列名
    b、max(列) 表示求此列的最大值
    c、min(列) 表示求此列的最小值
    d、sum(列) 表示求此列的和
    e、avg(列) 表示求此列的平均值

  (5)分組

    按照欄位分組,表示此欄位相同的數據會被放到一個集合中。分組後,只能查詢出相同的數據列,對於有差異的數據列無法顯示在結果集中

    可以對分組後的數據進行統計,做聚合運算
    select 列1, 列2, 聚合... from 表名 group by 列1, 列2 having 列1, 列2
    eg:  查詢男女生總數
      select gender, count(*) from student group by gender
    where與having的區別:where是對from後面指定的表進行篩選,屬於對原始數據的篩選;having是對group by的結果進行篩選。

  (6)排序

    select * from 表名 order by 列1 asc | desc, 列2 asc | desc, ...
    a、將數據按照列1進行排序,如果某些列1的值相同則按照列2排序
    b、預設按照從小到大的順序
    c、asc升序
    d、desc降序

  (7)分頁

    select * from 表名 limit start, count
    從start開始,看count條

6、關聯

  • 建表語句

  (1)create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null)
  (2)create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not bull, foreign key(classid) references class(id))

  • 插入一些數據:

  (1)insert into class values(0, "python1", 50), (0, "python2", 60), (0, "python3", 70)

  (2)insert into students values(0, "tom", 1, 1)

  • 關聯查詢:

  (1)select students.name, class.name from class inner join students on class.id = students.classid

  • 分類:

  (1)表A inner join 表B
    表A與表B匹配的行會出現在結果集中
  (2)表A left join 表B
    表A與表B匹配的行會出現在結果集中,外加表A中獨有的數據,未對應的數據使用null填充
  (3)表A right join 表B
    表A與表B匹配的行會出現在結果集中,外加表B中獨有的數據,未對應的數據使用null填充

二、python交互

1、連接資料庫

 1 import pymysql
 2 
 3 
 4 # 連接資料庫
 5 # 參數一:mysql服務所在主機的IP
 6 # 參數二:用戶名
 7 # 參數三:密碼
 8 # 參數四:要連接的資料庫名
 9 db = pymysql.connect("localhost", "root", "111111", "student")
10 
11 # 創建一個cursor對象
12 cursor = db.cursor()
13 -----------------------------------------------------------------------------------------
14 # 要執行的sql語句
15 sql = "select version()"
16 
17 # 執行sql語句
18 cursor.execute(sql)
19 
20 # 獲取返回的信息
21 data = cursor.fetchone()
22 print(data)
23 ----------------------------------------------------------------------------------------
24 # 斷開
25 cursor.close()
26 db.close()

  這裡我選擇的是pymysql,其實這個和MySQLdb相差無幾,命令也很像。連接時,主機IP如果是在本機,直接使用localhost即可,也可以寫IP地址,這樣可以實現遠程的連接。虛線中間部分是要進行不同操作時需要更改的部分。

2、創建資料庫表

  上面給出了連接資料庫的代碼,其實後面的操作就簡單多了,外部框架不變,只需要改內部的sql語句,以及個別的一些操作。

1 # 檢查表是否存在,如果有則刪除
2 cursor.execute("drop table if exists bancard")
3 
4 # 建表
5 sql = "create table bandcard(id int auto_increment primary key, money int not null)"
6 cursor.execute(sql)

3、插入數據

1 sql = "insert into bandcard values(0, 300)"
2 try:
3     cursor.execute(sql)
4     db.commit() # 執行這條語句才插入
5 except:
6     # 如果提交失敗,回滾到上一次數據
7     db.rollback()

4、更新資料庫

1 sql = "update bandcard set money=1000 where id=1"
2 try:
3     cursor.execute(sql)
4     db.commit()
5 except:
6     # 如果提交失敗,回滾到上一次數據
7     db.rollback()

  可以看到,後面的操作基本上以及回歸mysql本身,大家記住這樣一個流程就可以了。

5、刪除數據

1 sql = "delete from bandcard where money=200"
2 try:
3     cursor.execute(sql)
4     db.commit()
5 except:
6     # 如果提交失敗,回滾到上一次數據
7     db.rollback()

6、資料庫查詢操作

  • fetchone()

    功能:獲取下一個查詢結果集,結果集是一個對象

  • fetchall()

    功能:接收全部的返回的行

  • rowcount

    是一個只讀屬性,返回execute()方法影響的行數

 1 sql = "select * from bandcard where money>200"
 2 try:
 3     cursor.execute(sql)
 4     # 返回查詢結果
 5     reslist = cursor.fetchall()
 6     for row in reslist:
 7         print("%d--%d" % (row[0], row[1]))
 8 except:
 9     # 如果提交失敗,回滾到上一次數據
10     db.rollback()

三、mysql的封裝(方便以後使用時直接調用)

 1 import pymysql
 2 
 3 
 4 class my_sql():
 5 
 6     def __init__(self, host, user, passwd, dbName):
 7         self.host = host
 8         self.user = user
 9         self.passwd = passwd
10         self.dbName = dbName
11 
12     def connect(self):
13         self.db = pymysql.connect(
14             self.host, self.user, self.passwd, self.dbName)
15         self.cursor = self.db.cursor()
16 
17     def close(self):
18         self.cursor.close()
19         self.db.close()
20 
21     def get_one(self, sql):
22         res = None
23         try:
24             self.connect()
25             self.cursor.execute(sql)
26             res = self.cursor.fetchone()
27             self.close()
28         except:
29             print("查詢失敗")
30         return res
31 
32     def get_all(self, sql):
33         res = ()
34         try:
35             self.connect()
36             self.cursor.execute(sql)
37             res = self.cursor.fetchall()
38             self.close()
39         except:
40             print("查詢失敗")
41         return res
42 
43     def insert(self, sql):
44         return self.__edit(sql)
45 
46     def update(self, sql):
47         return self.__edit(sql)
48 
49     def delete(self, sql):
50         return self.__edit(sql)
51 
52     def __edit(self, sql):
53         count = 0
54         try:
55             self.connect()
56             count = self.cursor.execute(sql)
57             self.db.commit()
58             self.close()
59         except:
60             print("事務提交失敗")
61             self.db.rollback()

  上面的類中封裝了用python封裝了對mysql的連接,增,刪,改,查等功能,在今後使用的時候,完全可以直接調用其中的方法,避免重覆造輪子嘛。下麵給一個使用的案例:

1 from my_sql import my_sql
2 
3 # 這個是連接mysql的參數,前面有解釋到,使用時候連接上自己的資料庫就好
4 s = my_sql("xxx.xxx.xx.x", "xxxx", "xxxxxx", "student")
5 
6 # 查詢
7 res = s.get_all("select * from bandcard where money>200")
8 for row in res:
9     print("%d--%d" % (row[0], row[1]))

  當然在你使用的時候要寫完整調用的類的路徑,我這裡是在同一個目錄下寫的。新建一個自己的文件,引入my_sql中的my_sql類,然後就可以使用了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LVM學習邏輯捲管理創建邏輯捲遇到的問題 1 實驗環境 系統 | 內核 | 發行版本 | | CentOS | 2.6.32 754.2.1.el6.x86_64 | CentOS release 6.10 (Final) 由於是最小化安裝沒有xfs命令, 安裝如下包支持此命令 2 用gdisk分區 ...
  • 系統狀態查看命令: w 查看用戶 top 系統進程監控 uptime 查看某台伺服器運行了多久 htop 更加先進的互動式監控工具(需要安裝) iotop 監控並實時顯示磁碟IO輸入和輸出和程式進程(需要安裝) iftop 網路帶寬監控(需要安裝) 查看進程: ps ps -ef 查看所有進程 ps ...
  • 嵌入式里有時候也會和音頻打交道,比如最近特別火的智能音箱產品,離不開前端的音頻信號採集、降噪,中間的語音識別(ASR)、自然語言處理(NLP),以及後端的文語合成(TTS)、音頻播放。音頻信號採集是處理聲音的第一步,要採集音頻就離不開PCM編碼,音頻採集完成自然需要保存,waveform格式(.wa... ...
  • 在shell腳本中,變數分兩種,系統變數和自定義變數。 系統預設變數是系統自帶的一些變數,如path為路徑變數 用戶自定義變數為在編寫吧腳本的時候自己定義的一些變數 變數名命名規則 首個字元必須為字母“a-z和A-Z” 中間不能有空格,但是可以使用下劃線“_” 不能使用標點符號 不能使用bash中的 ...
  • 在MCU on Eclipse網站上看到Erich Styger在8月2日發的博文,一篇關於在Amazon FreeRTOS V10中使用運行時統計信息的文章,本人覺得很有啟發,特將其翻譯過來以備參考。原文網址:https://mcuoneclipse.com/2018/08/02/tutorial ...
  • 通過my.ini配置文件修改字元集:客戶端字元集設置:[mysql]default-character-set=utf8 [mysqld] character-set-server=utf8 。設置之後保存,在重啟mysql服務。登錄mysql:mysql -uroot -p (-u用戶名 -p密碼 ...
  • 占座 ...
  • 一、VM安裝(這個大家去百度吧....) 二、centos安裝 版本:centos7 ’https://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html(具體可以看這個) 1、安裝好之後,始終用自己的用戶名操作(這個很重要,因為如果在不同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...