作為一個(gè)測(cè)試,數(shù)據(jù)庫(kù)對(duì)我們來說那是異常熟悉,基本的查詢語(yǔ)言啥的更是不在話下。今天,我們要學(xué)習(xí)的是自動(dòng)化測(cè)試中對(duì)數(shù)據(jù)庫(kù)的操作。對(duì)于自動(dòng)化而言,對(duì)于數(shù)據(jù)庫(kù)的操作90%也是限于查詢操作。話不多說,進(jìn)入正題!
1.數(shù)據(jù)庫(kù)連接基礎(chǔ)
操作過數(shù)據(jù)庫(kù)的我們都知道,要操作數(shù)據(jù)庫(kù),首先安裝一個(gè)電腦客戶端(嗯~廢話)。然后怎么連接數(shù)據(jù)庫(kù)呢,就是后端給我們一個(gè)用戶名和密碼去連接一個(gè)數(shù)據(jù)庫(kù)。如圖:
只要我們把上面的東西都準(zhǔn)確無誤的填好,我們就連上了數(shù)據(jù)庫(kù)。連上之后,哈哈,想操作哪個(gè)表就操作哪個(gè)表。
由此我們可以得知,如果用代碼操作數(shù)據(jù)庫(kù)。那么無外乎就兩步操作:
1.連接上你所需要操作的數(shù)據(jù)庫(kù)。
2.通過sql語(yǔ)句來操作你所需要的數(shù)據(jù)。
2.pymysql
2.1 什么是pymysql
為了使python連接上數(shù)據(jù)庫(kù),你需要一個(gè)驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)是用于與數(shù)據(jù)庫(kù)交互的庫(kù)。python中與數(shù)據(jù)庫(kù)交互的庫(kù)有很多:
- 對(duì)接mysql數(shù)據(jù)庫(kù)使用到的庫(kù)為pymysql模塊
- 對(duì)接oracle數(shù)據(jù)庫(kù),使用的第三方庫(kù)為cx_Oracle
- 對(duì)接sqlserver使用的第三方庫(kù):pymssql
在這里我們以pymysql為例。安裝pymysql與安裝其他依賴庫(kù)沒有區(qū)別,要么直接pip install,要么pycharm中手動(dòng)搜索后安裝。這里不詳細(xì)講安裝過程。
3.數(shù)據(jù)庫(kù)模塊封裝
3.1 pymysql基本方法
安裝完成后我們就可以直接使用pymysql了,pymysql中提供一個(gè)方法connect();入?yún)橹鳈C(jī)名、用戶名、密碼、端口號(hào)等等,正好與我們上面“mysql連接圖”中要輸入的內(nèi)容一一對(duì)應(yīng)。執(zhí)行完connect()方法,我們就成功的連接上了想要連接的數(shù)據(jù)庫(kù)。這一步就對(duì)應(yīng)了我們平時(shí)Navicat上的數(shù)據(jù)庫(kù)連接操作。那么,我們?cè)趺磮?zhí)行sql語(yǔ)句呢?
調(diào)用connect()方法成功后,會(huì)返回一個(gè)connect的對(duì)象,我們通過返回的connect對(duì)象的.cursor()方法再創(chuàng)建一個(gè)cursor對(duì)象,通過cursor.execute()方法,將自己所要執(zhí)行的sql語(yǔ)句作為入?yún)?zhí)行execute方法,就能對(duì)數(shù)據(jù)進(jìn)行操作了!
3.1 數(shù)據(jù)庫(kù)操作的簡(jiǎn)單封裝
對(duì)于我們?nèi)粘J褂茫旅娣庋b的數(shù)據(jù)庫(kù)模塊足夠使用,具體參照如下代碼:
import pymysql
from scripts.handle_config import ConfigLoader
class HandleMySql:
"""數(shù)據(jù)庫(kù)處理類"""
def __init__(self):
config = ConfigLoader()
self.conn = pymysql.connect(host=config.get_value("mysql", "host"),
user=config.get_value("mysql", "user"),
password=config.get_value("mysql", "password"),
db=config.get_value("mysql", "db"),
port=config.get_int("mysql", "port"),
charset="utf8",
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.conn.cursor()
def get_value(self, sql, args=None, is_more=False):
"""
獲取數(shù)據(jù)庫(kù)的值
:param sql: sql語(yǔ)句
:param args: 其他參數(shù)
:param is_more: 是否顯示全部,默認(rèn)顯示一套條數(shù)據(jù)
:return: 字典為item的列表數(shù)據(jù)
"""
self.cursor.execute(sql, args)
self.conn.commit()
if is_more:
return self.cursor.fetchall()
else:
return self.cursor.fetchone()
def close(self):
"""關(guān)閉"""
self.cursor.close()
self.conn.close()
# if __name__ == '__main__':
# handle_sql = HandleMySql()
# sql = "select * from member where MobilePhone = %s;"
# single_data = handle_sql.get_value(sql, "15828641020")
# print(single_data)
使用時(shí)就像main函數(shù)紅一樣,先創(chuàng)建一個(gè)HandleMySql對(duì)象,然后調(diào)用此對(duì)象的get_value()方法,就可以得到一條數(shù)據(jù)或者一個(gè)列表格式的數(shù)據(jù),很是方便!哈哈,打完收工!!