前言
做自動化測試的時候,注冊了一個新用戶,產生了多余的數據,下次用同一賬號就無法注冊了,這種情況該怎么辦呢?
自動化測試都有個數據准備和數據清理的操作,如果因為此用例產生了多余的數據,就需要數據清理,可以用python連接mysql直接刪除多余的數據就可以了。
那么python3如何連接mysql呢?PyMySQL 是在 Python3.x 版本中用於連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
環境准備:
python3.6
PyMySQL 0.9.2
環境准備
使用pip安裝PyMySQL
pip install PyMySQL
先使用第三方工具連接mysql數據庫,比如navicat連接mysql,參考這篇https://www.cnblogs.com/yoyoketang/p/9994078.html
如下圖連接測試通過,那么連接數據庫至少應該知道這些信息,用戶名和密碼是授權遠程客戶端的用戶名和密碼,授權相關參考這篇https://www.cnblogs.com/yoyoketang/p/10268896.html
連接名: 自己定義,這個無所謂
主機名或ip地址:mysql服務的ip地址
端口:3306 (端口號,默認一般是3306)
用戶名:root (授權遠程登錄的用戶名)
密碼:123456 (授權遠程登錄的密碼)
查詢操作
如果新建了一個test數據庫,里面有一張user表,有name和psw兩個字段,使用sql查詢結果如下
select name,psw from user
接下來使用python轉換成對應的代碼查詢
import pymysql
# 打開數據庫連接
db = pymysql.connect(host='47.104.x.x',
port=3306,
user='root',
passwd='123456',
db='test')
# 使用 cursor() 方法創建一個游標對象cur
cur = db.cursor()
# 使用 execute() 方法執行 SQL 查詢
cur.execute("select name, psw from user")
# 使用 fetchall() 方法獲取查詢結果
data = cur.fetchall()
print(data)
# 關閉數據庫連接
db.close()
運行結果:
(('yoyo_1', '111111'), ('yoyo', '123456'), ('yoyo_2', '111111'), ('yoyo_3', '222222'), ('yoyo_4', '444444'))
如果想查詢結果以字典格式輸出,可以用db.cursor(cursor=pymysql.cursors.DictCursor)推薦!!!
有時候我們只想查詢某個字段對應的值,比如查詢yoyo_1賬號對應的psw值,並且取出來
select psw from user where name='yoyo_1'
查詢的結果是(('111111',),) 元組嵌套元組,取值的話用下標取出來就可以了
import pymysql
def select_db(sql):
'''查詢數據庫'''
# 打開數據庫連接
db = pymysql.connect(host='47.104.x.x',
port=3306,
user='root',
passwd='123456',
db='test')
# 使用 cursor() 方法創建一個游標對象cur
cur = db.cursor()
# 使用 execute() 方法執行 SQL 查詢
cur.execute(sql)
# 使用 fetchall() 方法獲取查詢結果
data = cur.fetchall()
# print(data) # 取出對應的psw值
# 關閉數據庫連接
db.close()
return data
if __name__ == "__main__":
sql = "select psw from user where name='yoyo_3'"
a = select_db(sql)[0][0]
print("查詢結果:%s" %str(a))
刪除操作
使用python刪除一條數據,比如我要刪除yoyo_1這條記錄
delete from user where name='yoyo_1'
import pymysql
def delete_db(sql_delete):
'''刪除操作'''
# 打開數據庫連接
db = pymysql.connect(host='47.104.x.x',
port=3306,
user='root',
passwd='123456',
db='test')
# 使用cursor()方法獲取操作游標
cur = db.cursor()
try:
cur.execute(sql_delete) # 執行
# 提交
db.commit()
except Exception as e:
print("操作異常:%s" % str(e))
# 錯誤回滾
db.rollback()
finally:
db.close()
if __name__ == '__main__':
sql_delete ="delete from user where name='yoyo_1' "
delete_db(sql_delete)
更新操作
更新name用戶名是yoyo的用戶,把psw改成666666
update user set psw='666666' where name='yoyo'
import pymysql
def update_db(sql_update):
'''3.更新操作'''
db = pymysql.connect(host='47.104.x.x',
port=3306,
user='root',
passwd='123456',
db='test')
# 使用cursor()方法獲取操作游標
cur = db.cursor()
try:
cur.execute(sql_update) # 執行sql
# 提交
db.commit()
except Exception as e:
# 錯誤回滾
print("錯誤信息:%s" % str(e))
db.rollback()
finally:
db.close()
if __name__ == '__main__':
sql_update ="update user set psw='666666' where name='yoyo'"
update_db(sql_update)
新增數據
往數據庫里面插入一條數據,比如在user表里面新增一個用戶信息yoyo_10,123456
insert into user(id, name, psw) values(10, 'yoyo_10', '123456')
import pymysql
def insert_db(sql_insert):
'''插入操作'''
db = pymysql.connect(host='47.104.x.x',
port=3306,
user='root',
passwd='123456',
db='test')
# 使用cursor()方法獲取操作游標
cur = db.cursor()
try:
cur.execute(sql_insert)
# 提交
db.commit()
except Exception as e:
print("錯誤信息:%s" % str(e))
# 錯誤回滾
db.rollback()
finally:
db.close()
if __name__ == "__main__":
sql_insert = "insert into user(id, name, psw) values(10, 'yoyo_10', '123456')"
insert_db(sql_insert)
從上面的代碼可以看出,除了查詢的代碼不一樣,新增、刪除、更新數據庫操作代碼都一樣,只是執行的sql不一樣
python自動化交流 QQ群:779429633