天天看點

測試開發幹貨:records讓你優雅的操作資料庫

作者:橙好測試開發

在做測試的時候,大部分同學都是使用的pymysql來操作資料庫,那麼今天就給大家介紹一個很厲害的第三方庫來操作資料庫records。這是什麼?幹什麼用的?哪個犄角旮旯的庫?是不是很多同學有這樣的疑問。做接口自動化的同學一定不陌生的一個庫requests,這裡告訴大家,records和requests是一個作者,驚不驚喜,意不意外。那麼有人就會問了,這個庫有什麼特殊,總結起來有這麼寫點

  • records 支援多種不同的資料庫
  • records 的方法非常簡單和統一,不像 pymysql 還需要記住如遊标對象這樣的底層資訊
  • 支援資料庫事務
  • 輕松導出為 json, yaml, xls, xlsx, pandas, html 等多種資料格式

好了,說了這麼多,迫不及待的來體驗一下

安裝

pip install records           

使用

連接配接資料庫,傳回 db 資料庫對象,db 對象執行 sql 語句

連接配接資料庫

擷取資料庫的格式是标準的 URL 格式,如果使用的不是 mysql 資料庫,隻需要換掉資料庫類型就可以了

import records
# 擷取資料庫
db = records.Database('mysql+pymysql://user:pw@localhost:3306/dev')
'''
mysql 資料庫類型
pymysql db-api
user 資料庫賬号
pw 資料庫密碼
localhost 資料庫位址
3306 端口
dev 連接配接的庫名
'''           

建立表

create_table = """CREATE TABLE IF NOT EXISTS user (
    name varchar(50),
    age int
) DEFAULT CHARSET=utf8 ;"""

db.query(create_table)           

插入資料

  • 插入單條資料
  • records 支援使用 :variable 定義變量,通過參數傳入完成動态傳值,在需要動态加載資料的時候非常有用
user = {"name": "張三", "age": 20}
db.query('INSERT INTO user(name,age) values (:name, :age)', **user)           
  • 插入多條資料
  • records 提供的 bulk_query 方法能快捷的插入和更新多條資料
users = [
    {"name":"張三", "age": 20},
    {"name":"李四", "age": 30},
    {"name":"王五", "age": 40}
]
db.bulk_query('INSERT INTO user(name,age) values (:name, :age)', users)
           

查詢

我們用的最多的就是查詢操作,查詢提供多種方式

  • all() 傳回所有的資料
  • first() 傳回第一條資料
  • one() 傳回唯一的資料,如何查詢的表隻有一條資料,可以用這個方法

這些方法預設傳回所有行的清單,可以使用參數as_dict=True轉成字典形式;as_ordereddict=True轉成排序字典形式

傳回第一條資料

def getFirstDate(self, sql):
            # 連接配接資料庫
        db = records.Database('mysql+pymysql://root:pwip:3306/yz')
        # 查詢
        rows = db.query(sql)
        # 以字典形式傳回第一條資料
        result = rows.first(as_dict=True)
        return result           
# 輸出
ic| db.getFirstDate(sql2): {'department': '計算機系', 'id': 1, 'name': '張三'}           

傳回所有的資料

def getAllDate(self, sql):
        db = records.Database('mysql+pymysql://root:pw@ip:3306/yz')
        rows = db.query(sql)
        # 傳回所有查詢資料
        return rows.all(as_dict=True)           
# 輸出
ic| db.getAllDate(sql2): [{'department': '計算機系', 'id': 1, 'name': '張三'},
                          {'department': '音樂系', 'id': 2, 'name': '李四'},
                          {'department': '美術系', 'id': 3, 'name': '王五'},
                          {'department': '英語系', 'id': 4, 'name': '李二蛋'},
                          {'department': '工程系', 'id': 5, 'name': '王翠花'},
                          {'department': '考古系', 'id': 6, 'name': '錢多多'},
                          {'department': '哲學系', 'id': 7, 'name': '牛二花'},
                          {'department': '計算機系', 'id': 8, 'name': '王鐵柱'},
                          {'department': '計算機系', 'id': 9, 'name': '孫悟空'}]           

導出資料

  • 導出為json
def json_data(self, sql):
        db = records.Database('mysql+pymysql://root:pwip:3306/yz')
        rows = db.query(sql)
        with open('test.json', 'w') as f:
            f.write(rows.export('json'))           

結果

測試開發幹貨:records讓你優雅的操作資料庫
  • 導出到Excel
def json_data(self, sql):
        db = records.Database('mysql+pymysql://root:pwip:3306/yz')
        rows = db.query(sql)
        with open('test.xlsx', 'wb') as f:
            f.write(rows.export('xlsx'))           

結果

測試開發幹貨:records讓你優雅的操作資料庫

好啦,records就介紹到這裡,更多用法有興趣的同學可以去實際操練一番,源碼非常簡單,你一定看的懂。

繼續閱讀