python MySQL执行SQL查询结果返回字典

  写自动化测试的时候我希望执行数据库前置任务,把数据库查询的结果作为请求的参数,但是正常返回结果为列表嵌套里面,这样就会影响到关键字准确的获取,特别的受限于SQL的查询字段的的顺序,所以希望返回的单条数据结果是字典,返回结果为多条数据的时统一存放在列表中便于对数据遍历,同时我在传入参数的时候可以准确的获取关键字;

# -*- coding: utf-8 -*-
# @Time    : 2018/12/30 18:39
# @Author  : Hunk
# @Email   : [email protected]
# @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以后返回的查询结果*/

[{‘name‘: ‘admin‘}, {‘name‘: ‘admin1‘}]

/*如果以元组的形式返回数据*/

通过元组返回的数据,如果获取的时候需要通过便利或者根据索引来获取指定数据,但是如果元组的长度变更,会造成获取数据的索引变动,容易对自己的代码的耦合性比较高。

((‘admin‘,), (‘admin1‘,))

对比两种返回的结果,明显以字典放的结果更容易被操作,也可以知道具体是哪个字段返回的结果,不会受限于SQL的变动而更改自己的代表,但是最后统一放在列表换是元组,这个是根据自己的习惯来处理,没有特定的要求。

原文地址:https://www.cnblogs.com/mengyu/p/10201185.html

时间: 12-30

python MySQL执行SQL查询结果返回字典的相关文章

MySQL执行sql查询并上传至远程服务器

最近项目中有需要做一个shell脚本,可以对一个数据库执行sql操作,并将结果转为txt,筛选结果用tab隔开,保存至一个远程服务器上,以供其他人用Excel读取用txt中的内容. MySQL中将结果保存下来,有两种方案,一种是在sql语句中增加INTO OUTFILE语句,并且可以定制化输出的格式.但是这种方法留下的文件在数据库所在的服务器上,而期望的是将文件放在执行脚本的机器上. 后来实现是不改变sql语句的内容,在脚本中将结果保存到本地/tmp目录下,再用curl上传到远程服务器上,下面抽

用python操作mysql数据库(之数据查询结果返回字典类型)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor(MySQLdb.cursors.DictCursor) #建立游标时,加上"MySQLdb.cursors.DictCursor",让数据查询结果返回字

mysql执行sql及慢查询监控

[前言] mysql可以记录用户执行的sql:记录到文件.表格 mysql可以定义执行多少时间以上得sql属于慢查询,也会根据配置,记录相关信息到文件.表格 [背景说明] 公司想监控记录每天执行了哪些sql,哪些sql是慢查询,然后去优化sql [技术说明] 其实只要搞清楚了mysql怎样记录执行sql的 怎样记录慢查询的即可 接下来就是写代码去梳理成报告,我这里使用的是python [最终效果如下] [技术细节] 1.修改my.cnf #整体的效果,全局开启表和日志文件都写,但是对于gener

MyBatis直接执行SQL查询及批量插入数据

MyBatis直接执行SQL查询及批量插入数据 一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel">  <result column="instanceid" property="instanceID" jdbcType="VARCHAR" />  <

oracle新建用户执行sql查询语句出现错误ORA-00942:表或视图不存在

oracle创建新用户后客户端执行SQL查询后出现错误提示如下: 执行查询语句如下: select * from sm_sales_order; ORA-00942:表或视图不存在 创建新用户并指定表空间和临时表空间 CREATE USER xxx IDENTIFIED BY xxxx DEFAULT TABLESPACE LMS TEMPORARY TABLESPACE TEMP; 授予系统权限connect grant connect to xxx; 授予对象权限,只限查询 grant se

Hibernate 关于执行sql查询语句(转)

原文  http://www.yshjava.cn/post/543.html 主题 SQLHibernate Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的.通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类--SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询: session.creat

获取动态SQL查询语句返回值(sp_executesql)

在写存储过程时经常会遇到需要拼接SQL语句的情况,一般情况下仅仅是为了执行拼接后的语句使用exec(@sql)即可. 而今天的一个存储过程却需要获取动态SQL的查询结果. 需求描述:在某表中根据Id值查询Cost值(表名不确定但表结构确定,如下面的Product表) 如果不考虑获取返回值,我们这样写即可: declare @tableName varchar(50) declare @id varchar(10) declare @cost numeric(18,2) declare @sql

mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误

使用navcat在导入别人发的mysql数据的时候,报了下面这个错误: [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8' at line 9 错误原因主要

mysql执行sql文件

mysql -uspider_55haitao -pspider_55haitao -Dspider_55haitao</home/gphonebbs/Dump20161109.sql 方法一 使用cmd命令执行(windows下,unix或Linux在的其控制台下)[MySQL的bin目录]\mysql –u用户名 –p密码 –D数据库<[sql脚本文件路径全名],示例:D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql注意

Python中执行sql脚本时GO语句出错问题

sql脚本: --创建链接服务器 (其中db2server是DB2的ip地址或服务器名)exec sp_addlinkedserver 'srv_lnk', '', 'SQLOLEDB','10.138.60.94'exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','123456' Go--数据导入(表B存在) --Insert into srv_lnk.sys.Estamp.EstampConfig(field1,field2)INSE