什麼是 PyMySQL?
PyMySQL是在Python3.x版本中用於連線MySQL伺服器的一個庫,Python2中則使用mysqldb。它是一個遵循 Python資料庫APIv2.0規範,幷包含了pure-Python MySQL客戶端的庫。
為什麼需要連線資料庫?
在介面測試過程中,常常會有增刪改查的操作,但是單從介面返回不能確保資料是否真的按照我們期望的結果來走,這時就需要查詢資料庫來核對,如註冊介面,需要查詢賬號是否新建成功;介面修改資料,資料庫的資料是否被更新到最新等等。
安裝
cmd命令列執行pip install pymysql
運算元據庫
連線資料庫之前,要先確保資料庫已經建立。運算元據庫的步驟可以簡單分為三步:
1. 連線資料庫pymysql.connect(host, user, password, port, charset)
2. 建立遊標物件cursor()
3. 執行sqlexecute(sql)
import pymysql
con = pymysql.connect(host="192.168.100.101", # 連線資料庫
user="test",
password="123456",
port=3306,
charset="utf8"
)
cur = con.cursor() # 建立遊標
sql = "SELECT * FROM member WHERE username ='test'"
res = cur.execute(sql) # 執行sql
上面中提到一個概念:遊標,實際上就是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制,就等於游標的上下移動,儘管遊標能遍歷結果中的所有行,但它一次只指向一行。遊標的作用就是用於對查詢資料庫所返回的記錄進行遍歷,以便進行相應的操作,就像電腦的滑鼠一樣。
提取查詢結果
? fetchall:返回的是一個查詢集(元祖的形式,查詢到的每一條資料為這個元祖中的一個元素)
? fatchone:獲取查詢到的資料中的第一條
import pymysql
con = pymysql.connect(host="127.0.0.1",
user="test",
password="123456",
port=3306,
charset="utf8"
)
cur = con.cursor() # 建立遊標
sql = "SELECT mobile_phone FROM futureloan.member limit 4"
res = cur.execute(sql)
datas = cur.fetchall()
print(datas)
for i in datas:
print(i)
執行結果:
C:\software\python\python.exe D:/learn/test.py
(('13678703234',), ('15690403234',), ('15680113234',), ('13503071234',))
('13678703234',)
('15690403234',)
('15680113234',)
('13503071234',)
Process finished with exit code 0
?特別注意:
執行完增刪改的sql語句之後,需要進行commit
提交確認,這裡commit
的作用相當於資料庫中的提交事務。
封裝
按需封裝,想怎麼封就怎麼裝。
import pymysql
from common.my_config import conf
class HandleDB:
def __init__(self):
# 讀取配置檔案的資料庫資訊
self.con = pymysql.connect(host=conf.get_str("mysql", "host"),
user=conf.get_str("mysql", "user"),
password=conf.get_str("mysql", "password"),
port=conf.get_int("mysql", "port"),
charset="utf8"
)
self.cur = self.con.cursor()
def get_one(self, sql):
"""獲取查詢到的第一條資料"""
self.con.commit()
self.cur.execute(sql)
return self.cur.fetchone()
def get_all(self, sql):
"""獲取sql語句查詢到的所有資料"""
self.con.commit()
self.cur.execute(sql)
return self.cur.fetchall()
def count(self, sql):
"""統計sql語句查詢到的資料"""
self.con.commit()
res = self.cur.execute(sql)
return res
def close(self):
self.cur.close() # 關閉遊標物件
self.con.close() # 斷開連線