python中的mysql操做

一. 數據庫在自動化測試中的應用

存測試數據python

有的時候大批量的數據,咱們須要存到數據庫中,在測試的時候才能用到,測試的時候就從數據庫中讀取出來。這點是很是重要的!mysql

存測試結果sql

二. python中的數據庫之必備前提條件

1. 安裝:pyMysql

python2中使用mysqldb,python3中再也不支持,換成pyMysql數據庫

 

2. 安裝步驟

1) 安裝pyMysql模塊:pip install PyMysql函數

2) python鏈接mysql數據庫,須要下載驅動:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方網站提供的驅動版本,目前只支持到python3.4,python版本要與驅動支持的版本匹配才能安裝成功測試

3) 安裝mysql圖形界面Navicat,鏈接數據庫後,方便查看/編輯數據庫數據fetch

(可選)安裝mysql服務端:https://dev.mysql.com/downloads/mysql/網站

 

3. 數據庫的常規操做

增刪改查,因此咱們要學的也是利用python去數據庫裏面讀取數據,進行增刪改查操做編碼

 

三. python—mysql操做

對數據庫進行操做步驟:spa

1. 鏈接數據庫、建立遊標

2. 準備好增、刪、改、查sql語句

3. 執行sql語句

4. 讀取執行結果—執行影響的行

5. 關閉遊標、關閉鏈接(釋放鏈接數)

 

數據庫鏈接信息以下:

  IP地址、端口號、數據庫名字、登陸用戶名、密碼

 

pymysql中的鏈接數據庫方法:

conn = pymysql.Connect(host, port, db, user, passwd)

cursorclass = pymysql.cursors.DictCursor   指定返回數據爲字典形式

 

建立遊標:

cursor = conn.cursor()  每次操做都須要獲取遊標,才能進行

 

四. python之查詢數據

1. 查詢數據語法

sql語句:select 字段 from 表名 where 條件語句

 

2. 展現數據,須要調用以下函數

fetchall():返回的數據格式是列表形式的

fetchone():返回的數據格式是元組形式的(能夠用cursorclass = pymysql.cursors.DictCursor改爲字典的形式)

 

3. 條件語句的用法

重點看代碼,掌握用法

 

五. python之execute

execute中,sql語句的多種方式:

execute(sql語句、參數[可選]):

 

1. 數據直接寫在sql語句中

2. 用格式化的方式

  sql語句中:列表和元組   %s代替

        字典:%(鍵名)s代替

  參數:爲真正的數值

 

例:

insert_sql = "insert into test1(id, name) values(%s, %s)"

data = [14, 'xiaojian']

#字典

data1 = {'id': 14, 'name': 'xiaojian'}

insert_sql = "insert into test1(id, name) values(%(id)s, %(name)s)"

 

cursor.execute(insert_sql, data)

 

六. 提交和回滾

提交操做:在對數據庫進行任何修改的狀況下,都使用commit函數來提交操做

修改包括增長、修改、刪除數據等操做

提交修改:

  conn.commit()

 

回滾操做:在對數據庫進行修改的過程當中,因任何異常而致使修改中斷,咱們都應該使用回滾操做使數據庫恢復到修改以前的狀態

回滾修改:

  conn.rollback()

七. 實例

實例1:增長數據

#引入相關的庫
import pymysql
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
#鏈接操做:編碼格式的指定,默認返回數據類型的指定 
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
          db
=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor)

#獲取遊標 cur = conn.cursor()

#sql語句——增長數據
sql_insert = "insert into python6(name, sex) values('xiaohua', 'female')"
#執行sql語句
try:
  cur.execute(sql_insert)
  conn.commit()
except:
  conn.rollback()


#關閉鏈接、關閉遊標
cur.close()
conn.close()

運行結果:

實例2:查詢數據

#引入相關的庫
import pymysql mysql_host = "localhost" mysql_port = 3306 mysql_db = "xiaozhai" mysql_user = "root" mysql_passwd = "123456"

#鏈接操做:編碼格式的指定,默認返回數據類型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd, db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) #獲取遊標
cur = conn.cursor() #查詢語句
sql_select = "select * from python6"
#執行
cur.execute(sql_select) #獲取查詢結果——會獲取一條數據
data_a = cur.fetchone() print(data_a) print("=============================") #獲取查詢結果——獲取全部條數據(遊標已經到了第二條,從第二條開始讀)
data_all = cur.fetchall() print(data_all) #關閉鏈接、關閉遊標
cur.close() conn.close()

運行結果

{'id': 1, 'sex': 'male', 'name': 'xiaozhai'} ============================= [{'id': 2, 'sex': 'male', 'name': 'xiaoli'}, {'id': 3, 'sex': 'female', 'name': 'xiaohua'}]

實例3:格式化方式插入數據

列表形式

#引入相關的庫
import pymysql mysql_host = "localhost" mysql_port = 3306 mysql_db = "xiaozhai" mysql_user = "root" mysql_passwd = "123456"

#鏈接操做:編碼格式的指定,默認返回數據類型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd, db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) #獲取遊標
cur = conn.cursor() #格式化方式插入數據
data_list = ["xiaozhao", "female"] sql_insert = "insert into python6(name, sex) values(%s, %s)"

#執行sql語句
try: cur.execute(sql_insert, data_list) conn.commit() except: conn.rollback() #關閉鏈接、關閉遊標
cur.close() conn.close()

運行結果

字典形式

#引入相關的庫
import pymysql mysql_host = "localhost" mysql_port = 3306 mysql_db = "xiaozhai" mysql_user = "root" mysql_passwd = "123456"

#鏈接操做:編碼格式的指定,默認返回數據類型的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd, db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) #獲取遊標
cur = conn.cursor() #格式化方式插入數據
data_dict = {"name": "xiaoliu", "sex":"female"} sql_insert = "insert into python6(name, sex) values (%(name)s, %(sex)s)"

#執行sql語句
try: cur.execute(sql_insert, data_dict) conn.commit() except: conn.rollback() #關閉鏈接、關閉遊標
cur.close() conn.close()

運行結果

實例4:封裝成類

import pymysql class Mysql_Operate: def __init__(self, host, db, user, passwd, port=3306): #鏈接數據庫
        try: self.conn = pymysql.Connect(host=host, user=user, password=passwd, db=db, port=port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) #獲取遊標
            self.cur = self.conn.cursor() #沒有異常,connect_flag爲0
            self.connect_flag = 0 except Exception as e: print(e) self.connect_flag = 1

    #查找
    def select_all_datas(self, select_sql): #查詢數據——execute函數
 self.cur.execute(select_sql) #獲取全部的數據並返回
        data_all = self.cur.fetchall() return data_all #更新數據
    def update_datas(self, update_sql ): try: self.cur.execute(update_sql) self.conn.commit() return True except: self.conn.rollback() return False #關閉數據庫鏈接
    def close_db(self): self.cur.close() self.conn.close() mysql_host = "localhost" mysql_port = 3306 mysql_db = "xiaozhai" mysql_user = "root" mysql_passwd = "123456" ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db) if ms.connect_flag == 0: pass
相關文章
相關標籤/搜索