Python操做MySQL數據庫(步驟教程)

咱們常常須要將大量數據保存起來以備後續使用,數據庫是一個很好的解決方案。在衆多數據庫中,MySQL數據庫算是入門比較簡單、語法比較簡單,同時也比較實用的一個。在這篇博客中,將以MySQL數據庫爲例,介紹一下如何使用Python操做數據庫。html

本科階段曾學過使用Java對MySQL數據庫進行操做,基本思路是先鏈接數據庫,而後執行SQL語句對數據庫進行操做,最後打印結果並斷開鏈接。使用Python操做數據庫的流程和以上過程基本一致,在對其進行介紹以前,先介紹一些基本的概念。java

1 基本概念python

1.1 使用python操做數據庫的流程mysql

以流程圖的方式展現python操做MySQL數據庫的流程:web

這裏寫圖片描述

對上圖的解讀:首先依次建立Connection對象(數據庫鏈接對象)用於打開數據庫鏈接,建立Cursor對象(遊標對象)用於執行查詢和獲取結果;而後執行SQL語句對數據庫進行增刪改查等操做並提交事務,此過程若是出現異常則使用回滾技術使數據庫恢復到執行SQL語句以前的狀態;最後,依次銷燬Cursor對象和Connection對象。sql

下面依次對Connection對象、Cursor對象和事務等概念進行介紹。數據庫

1.2 Connection對象服務器

Connection對象即爲數據庫鏈接對象,在python中可使用pymysql.connect()方法建立Connection對象,該方法的經常使用參數以下:併發

host:鏈接的數據庫服務器主機名,默認爲本地主機(localhost);字符串類型 user:用戶名,默認爲當前用戶;字符串類型 passwd:密碼,無默認值;字符串類 db:數據庫名稱,無默認值;字符串類型 port:指定數據庫服務器的鏈接端口,默認爲3306;整型fetch

Connection對象經常使用的方法以下:

cursor():使用當前鏈接建立並返回遊標 commit():提交當前事務 rollback():回滾當前事務 close():關閉當前鏈接

1.3 Cursor對象

Cursor對象即爲遊標對象,用於執行查詢和獲取結果,在python中可使用conn.cursor()建立,conn爲Connection對象。Cursor對象經常使用的方法和屬性以下:

execute():執行數據庫查詢或命令,將結果從數據庫獲取到客戶端 fetchone():獲取結果集的下一行 fetchmany():獲取結果集的下幾行 fetchall():獲取結果集中剩下的全部行 close():關閉當前遊標對象 rowcount:最近一次的execute返回數據的行數或受影響的行數

execute()方法和fetch類方法的工做示原理以下圖所示:

這裏寫圖片描述 這裏寫圖片描述

1.4 事務

事務是數據庫理論中一個比較重要的概念,指訪問和更新數據庫的一個程序執行單元,具備ACID特性:

原子性(Atomic):事務中的各項操做要麼全都作,要麼全都不作,任何一項操做的失敗都會致使整個事務的失敗 一致性(Consistent):事務必須使數據庫從一個一致性狀態變到另外一個一致性狀態 隔離性(Isolated):併發執行的事務彼此沒法看到對方的中間狀態,一個事務的執行不能被其餘事務干擾 持久性(Durable):事務一旦提交,它對數據庫的改變就是永久性的,能夠經過日誌和同步備份在故障發生後重建數據。

在開發時,咱們以如下三種方式使用事務:

正常結束事務:conn.commit() 異常結束事務:conn.rollback() 關閉自動commit:設置 conn.autocommit(False)

2 使用python實現對MySQL數據庫的增刪改查等操做

在python中操做MySQL數據庫時,要使用的模塊是:

Python2中:mysqldb(pip2 install mysqldb) Python3中:pymysql(pip3 install pymysql)

本篇博客所使用的環境爲:

python 3.6 win 10 pycharm 2018.1 pymysql 0.9.2 mysql 5.5 Navicat 11

下面將以具體代碼的形式依次介紹python中如何實現對MySQL數據庫的增刪改查等操做。數據庫截圖以下:

這裏寫圖片描述

2.1 鏈接數據庫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 9 : 24
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法建立一個遊標對象
cursor = conn.cursor()
 
# 使用execute()方法執行SQL查詢
cursor.execute( 'SELECT VERSION()' )
 
# 使用fetchone()方法獲取單條數據
data = cursor.fetchone()
 
# 打印
print( 'database version: %s' % data)
 
# 關閉數據庫鏈接
conn.close()
 
# 結果
# database version: 5.5 . 20

2.2 建立數據表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 9 : 24
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法建立一個遊標對象cursor
cursor = conn.cursor()      # 遊標對象用於執行查詢和獲取結果
 
# 使用execute()方法執行SQL,若是表存在則將其刪除
cursor.execute( 'DROP TABLE IF EXISTS EMPLOYEE' )
 
# 使用預處理語句建立表
sql = "" "CREATE TABLE `employee` (
   `first_name` varchar( 255 ) DEFAULT NULL COMMENT '姓' ,
   `last_name` varchar( 255 ) DEFAULT NULL COMMENT '名' ,
   `age` int ( 11 ) DEFAULT NULL COMMENT '年齡' ,
   `sex` varchar( 255 ) DEFAULT NULL COMMENT '性別' ,
   `income` varchar( 255 ) DEFAULT NULL COMMENT '收入'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"" "
 
# 執行SQL語句
cursor.execute(sql)
 
# 關閉數據庫鏈接
conn.close()

效果截圖以下:

這裏寫圖片描述 這裏寫圖片描述

2.3 數據庫插入操做

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 9 : 24
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法獲取操做遊標
cursor = conn.cursor()
 
# SQL語句:向數據表中插入數據
sql = "" "INSERT INTO employee(first_name,
          last_name, age, sex, income)
          VALUES ( '趙' , '麗穎' , 38 , '女' , 15000 ) "" "
 
# 異常處理
try :
     # 執行SQL語句
     cursor.execute(sql)
     # 提交事務到數據庫執行
     conn.commit()       # 事務是訪問和更新數據庫的一個程序執行單元
except:
     # 若是發生錯誤則執行回滾操做
     conn.rollback()
 
# 關閉數據庫鏈接
conn.close()

效果截圖以下:

這裏寫圖片描述 這裏寫圖片描述

2.4 數據庫查詢操做

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 9 : 25
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法獲取操做遊標
cursor = conn.cursor()
 
# SQL語句:查詢
sql = "SELECT * FROM employee WHERE income > 1000 "
 
# 異常處理
try :
     # 執行SQL語句
     cursor.execute(sql)
     # 獲取全部的記錄列表
     results = cursor.fetchall()
     # 遍歷列表
     for row in results:
         # 打印列表元素
         print(row)
         # 姓
         first_name = row[ 0 ]
         # 名
         last_name = row[ 1 ]
         # 年齡
         age = row[ 2 ]
         # 性別
         sex = row[ 3 ]
         # 收入
         income = row[ 4 ]
         # 打印列表元素
         print(first_name, last_name, age, sex, income)
except:
     print( 'Uable to fetch data!' )
 
# 關閉數據庫鏈接
conn.close()

效果截圖以下:

這裏寫圖片描述 這裏寫圖片描述

2.5 數據庫更新操做

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 10 : 18
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法獲取操做遊標
cursor = conn.cursor()
 
# SQL語句,執行更新操做
sql = 'UPDATE employee SET age = age + 5 WHERE sex = "男"'
 
# 異常處理
try :
     # 執行SQL語句
     cursor.execute(sql)
     # 提交到數據庫執行
     conn.commit()
except:
     # 發生錯誤時回滾
     conn.rollback()
 
# 關閉數據庫鏈接
conn.close()

效果截圖以下:

這裏寫圖片描述 這裏寫圖片描述

2.6 數據庫刪除操做

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#-*-coding:utf- 8 -*-
"" "
@author :taoshouzheng
@time : 2018 / 7 / 18 9 : 25
@email :tsz1216 @sina .com
"" "
 
import pymysql
 
# 打開數據庫鏈接
conn = pymysql.connect( 'localhost' , 'root' , 'root' , 'test_db' )
 
# 使用cursor()方法獲取操做遊標
cursor = conn.cursor()
 
# SQL語句,執行刪除操做
sql = 'DELETE FROM employee WHERE income > 5000 AND age >35'
 
# 異常處理
try :
     # 執行SQL語句
     cursor.execute(sql)
     # 提交到數據庫執行
     conn.commit()
except:
     # 發生錯誤時回滾
     conn.rollback()
 
# 關閉數據庫鏈接
conn.close()
這裏寫圖片描述 這裏寫圖片描述轉自:https://www.2cto.com/database/201807/761697.html
相關文章
相關標籤/搜索