在做測試的時候,大部分同學都是使用的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'))
結果
- 導出到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就介紹到這裡,更多用法有興趣的同學可以去實際操練一番,源碼非常簡單,你一定看的懂。