Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程
在上一篇Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化淺析yaml配置文件原理及用法,主要介紹主要介紹yaml語(yǔ)法、yaml存儲(chǔ)數(shù)據(jù),封裝類讀寫yaml配置文件。
在自動(dòng)化過程中,我們需要查詢數(shù)據(jù)庫(kù),校驗(yàn)結(jié)果是否正確,比如充值完成之后,需要查詢數(shù)據(jù)庫(kù),查看充值是否成功。
以下主要介紹,pymysql安裝、操作流程、語(yǔ)法基礎(chǔ)及封裝操作數(shù)據(jù)庫(kù)類。
一、pymysql介紹及安裝
01 pymysql介紹
MySQL應(yīng)該說(shuō)是如今使用最為普遍的數(shù)據(jù)庫(kù)了,沒有之一,而Python作為最為流行的語(yǔ)言之一,自然少不了與MySQL打交道,其中PyMySQL就是使用最多的工具庫(kù)。
- PyMySQL是一個(gè)純Python寫的MySQL客戶端,可以在CPython、PyPy、IronPython和Jython環(huán)境下運(yùn)行;
- PyMySQL的性能和MySQLdb幾乎相當(dāng),如果對(duì)性能要求 不是特別的強(qiáng),使用PyMySQL將更加方便;
- PyMySQL的使用方法和MySQLdb幾乎一樣;
02 pymysql安裝
方式一:使用命令安裝
pip install pymysql
方式二:PyCharm內(nèi)部安裝

導(dǎo)入模塊:
import pymysql
二、pymysql流程及模塊說(shuō)明
01 pymysql操作流程
- 導(dǎo)入pymysql;
- 建立數(shù)據(jù)庫(kù)連接:使用pymysql的connect()方法連接數(shù)據(jù),返回連接對(duì)象;
- 使用連接對(duì)象創(chuàng)建游標(biāo)對(duì)象(用于操作sql);
- 準(zhǔn)備寫sql語(yǔ)句(select * from student);
- 使用游標(biāo)對(duì)象執(zhí)行sql;
- 查詢數(shù)據(jù)使用游標(biāo)獲取;
- 關(guān)閉游標(biāo)(先)和數(shù)據(jù)庫(kù)連接(后)。
02
02pymysql模塊說(shuō)明
Connection對(duì)象
表示:conn=connect(參數(shù)列表)
作用:用于建立與數(shù)據(jù)庫(kù)的連接;
創(chuàng)建對(duì)象:調(diào)用connect()方法;
參數(shù)列表:
host:連接的mysql主機(jī),如本機(jī)是'localhost';
port:連接的mysql主機(jī)的端口,默認(rèn)是3306;
database:數(shù)據(jù)庫(kù)的名稱;
user:連接的用戶名;
password:連接的密碼;
charset:通信采用的編碼方式,推薦使用utf8;
對(duì)象的方法
對(duì)象方法如下:
close():關(guān)閉連接;
commit():提交;
cursor():返回Cursor對(duì)象,用于執(zhí)行sql語(yǔ)句并獲得結(jié)果;
execute(operation [, parameters ]):執(zhí)行語(yǔ)句,返回受影響的行數(shù),主要用于執(zhí)行insert、update、delete語(yǔ)句,也可以執(zhí)行create、alter、drop等語(yǔ)句;
fetchone():執(zhí)行查詢語(yǔ)句時(shí),獲取查詢結(jié)果集的第一個(gè)行數(shù)據(jù),返回一個(gè)元組;
fetchall():執(zhí)行查詢時(shí),獲取結(jié)果集的所有行,一行構(gòu)成一個(gè)元組,再將這些元組裝入一個(gè)元組返回;
關(guān)于pymysql防注入,字符串拼接查詢,容易造成注入,為了避免注入,使用pymysql提供的參數(shù)化語(yǔ)句;
Cursor對(duì)象
游標(biāo)(cursor)就是游動(dòng)的標(biāo)識(shí),通俗的說(shuō),一條sql取出對(duì)應(yīng)n條結(jié)果資源的接口/句柄,就是游標(biāo),沿著游標(biāo)可以一次取出一行。
- 用于執(zhí)行sql語(yǔ)句,使用頻度最高的語(yǔ)句為select、insert、update、delete;
- 獲取Cursor對(duì)象:調(diào)用Connection對(duì)象的cursor()方法:cs1=conn.cursor()
對(duì)象的屬性
- rowcount只讀屬性,表示最近一次execute()執(zhí)行后受影響的行數(shù);
- connection獲得當(dāng)前連接對(duì)象;
三、pymysql語(yǔ)法基礎(chǔ)
01 代碼示例
import pymysql
# 連接數(shù)據(jù)庫(kù)
conn = pymysql.connect(host='127.0.0.1', user='ITester', password='123456',
database='ITester', charset='utf8')
# 創(chuàng)建游標(biāo)
cursor = conn.cursor()
# 執(zhí)行sql語(yǔ)句
sql = 'select * from user limit 3;'
res = cursor.execute(sql)
# 獲取查詢結(jié)果的1條數(shù)據(jù)
data = cursor.fetchone()
print(data)
# 關(guān)閉游標(biāo)連接
cursor.close()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close()
02 語(yǔ)法總結(jié)
1.連接數(shù)據(jù)庫(kù),需要host、user、password、database、charset等信息;
2.操作數(shù)據(jù)庫(kù)先創(chuàng)建游標(biāo);
3.執(zhí)行指定的sql語(yǔ)句,如果涉及到增、刪、改數(shù)據(jù)庫(kù)必須要conn.commit(),提交事務(wù)
4.查詢獲取數(shù)據(jù)條數(shù)有三種方法fetchone、fetchmany、fetchall。
- cursor.fetchone() :默認(rèn)獲取查詢結(jié)果的第一條數(shù)據(jù);
- cursor.fetchmany(2) :獲取查詢結(jié)果的指定條數(shù),比如獲取2條數(shù)據(jù);
- cursor.fetchall() :獲取查詢結(jié)果的所有數(shù)據(jù);
5.需要注意的是,fetch獲取的數(shù)據(jù)默認(rèn)是元組,如果想要字典類型,
cursor=pymysql.cursors.DictCursor;
6.先關(guān)閉游標(biāo),后關(guān)閉數(shù)據(jù)庫(kù)連接;
四、封裝數(shù)據(jù)庫(kù)類
01 封裝說(shuō)明
在實(shí)際項(xiàng)目中,很多地方都有用到數(shù)據(jù)庫(kù)的操作,所以需要將數(shù)據(jù)庫(kù)相關(guān)操作進(jìn)行封裝,方便其他模塊調(diào)用。
如下,在common目錄下,新建文件db_handler.py 用于封裝數(shù)據(jù)庫(kù)操作。

db_handler.py
import pymysql
class DBHandler:
def __init__(self,host,port,user,password,
database,charset,**kwargs):
# 連接數(shù)據(jù)庫(kù)服務(wù)器
self.conn = pymysql.connect(host=host, port=port, user=user,password=password,
database=database,cursorclass=pymysql.cursors.DictCursor,
charset=charset,**kwargs)
# 獲取游標(biāo)
self.cursor = self.conn.cursor()
def query(self, sql, args=None,one=True):
self.cursor.execute(sql, args)
# 提交事務(wù)
self.conn.commit()
if one:
return self.cursor.fetchone()
else:
return self.cursor.fetchall()
def close(self):
self.cursor.close()
self.conn.close()
if __name__ == "__main__":
db = DBHandler(host='127.0.0.1', port=3306,
user='ITester', password='123456',
database='ITester', charset='utf8')
sql = 'select * from user limit 1;'
data = db.query(sql)
print(data)
以上就是Python接口自動(dòng)化淺析pymysql數(shù)據(jù)庫(kù)操作流程的詳細(xì)內(nèi)容,更多關(guān)于Python接口自動(dòng)化pymysql數(shù)據(jù)庫(kù)操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法
今天小編就為大家分享一篇python 根據(jù)時(shí)間來(lái)生成唯一的字符串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01
Python-flask調(diào)用接口返回中文數(shù)據(jù)問題
這篇文章主要介紹了Python-flask調(diào)用接口返回中文數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Python實(shí)現(xiàn)的調(diào)用C語(yǔ)言函數(shù)功能簡(jiǎn)單實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)的調(diào)用C語(yǔ)言函數(shù)功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了Python使用ctypes模塊調(diào)用C語(yǔ)言函數(shù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
使用matplotlib在Python中繪制數(shù)據(jù)的詳細(xì)教程
Python 在處理數(shù)據(jù)方面非常出色,通常,數(shù)據(jù)集 會(huì)包括多個(gè)變量和許多實(shí)例,這使得很難理解數(shù)據(jù)的情況,數(shù)據(jù)可視化是幫助您識(shí)別數(shù)據(jù)模式的一種有用方式,本教程將描述如何使用 matplotlib 在 Python 中繪制數(shù)據(jù),需要的朋友可以參考下2024-10-10
基于Pytorch實(shí)現(xiàn)分類器的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何基于Pytorch實(shí)現(xiàn)兩個(gè)分類器:?softmax分類器和感知機(jī)分類器,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-04-04
python光學(xué)仿真學(xué)習(xí)wxpython創(chuàng)建手速測(cè)試程序
這篇文章主要介紹了python光學(xué)仿真學(xué)習(xí)使用wxpython創(chuàng)建一個(gè)手速測(cè)試程序示例的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
Python的scikit-image模塊實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于Python的scikit-image模塊實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-12-12
python實(shí)現(xiàn)定制交互式命令行的方法
這篇文章主要介紹了python實(shí)現(xiàn)定制交互式命令行的方法,需要的朋友可以參考下2014-07-07

