在做测试的时候,大部分同学都是使用的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
就介绍到这里,更多用法有兴趣的同学可以去实际操练一番,源码非常简单,你一定看的懂。