写自动化测试的时候我但愿执行数据库前置任务,把数据库查询的结果做为请求的参数,可是正常返回结果为列表嵌套里面,这样就会影响到关键字准确的获取,特别的受限于SQL的查询字段的的顺序,因此但愿返回的单条数据结果是字典,返回结果为多条数据的时统一存放在列表中便于对数据遍历,同时我在传入参数的时候能够准确的获取关键字;mysql
# -*- coding: utf-8 -*- # @Time : 2018/12/30 18:39 # @Author : Hunk # @Email : liuqiang_cl@163.com # @File : ex01.py # @Software: PyCharm import pymysql db = pymysql.connect(host='47.104.149.180', user="root", passwd="root", db='movie', port=3306, charset='utf8') cursor = db.cursor() sql = """select name from admin; """ cursor.execute(sql) desc = cursor.description # 获取字段的描述,默认获取数据库字段名称,从新定义时经过AS关键从新命名便可 data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] # 列表表达式把数据组装起来 cursor.close() db.close() print(data_dict)
/*执行SQL之后返回的查询结果*/sql
[{'name': 'admin'}, {'name': 'admin1'}]
/*若是以元组的形式返回数据*/数据库
经过元组返回的数据,若是获取的时候须要经过便利或者根据索引来获取指定数据,可是若是元组的长度变动,会形成获取数据的索引变更,容易对本身的代码的耦合性比较高。测试
(('admin',), ('admin1',))
对比两种返回的结果,明显以字典放的结果更容易被操做,也能够知道具体是哪一个字段返回的结果,不会受限于SQL的变更而更改本身的表明,可是最后统一放在列表换是元组,这个是根据本身的习惯来处理,没有特定的要求。fetch