游标执行后返回的结果都只是数据,但是不带有列名标识。这里需要处理2个问题:

  • 将返回的数据映射到每一列上
  • 当返回的结果很大的时候,需要使用迭代器来提升性能。

解决上面的2个问题,在python里面可以采用下面的2种方式来处理。

  1. 使用namedtuple 和 map object。
  2. 使用yield 和 zip。

下面是示例代码:

Result_From_DB# MySQL 数据库
import mysql
from mysql import connector
from collections import namedtuple def generate_namedtuple(cur):
from collections import namedtuple
fieldnames = [d[0].lower() for d in cur.description]
Record = namedtuple('Record', fieldnames)
rows = cur.fetchall()
if not rows:return
else:
return map(Record._make, rows) def generate_dicts(cur):
fieldnames = [d[0].lower() for d in cur.description]
while True:
rows = cur.fetchmany()
if not rows: return
for row in rows:
yield dict(zip(fieldnames, row)) if __name__ == '__main__':
user = 'herbert'
pwd = '851020'
host = '127.0.0.1'
db = 'world'
cnx = mysql.connector.connect(user=user, password=pwd, host=host,database=db)
cur = cnx.cursor()
cur.execute("SELECT Name, CountryCode, District, Population FROM CITY\
where CountryCode = 'CHN' AND Population > 500000") for r in generate_dicts(cur):
print(r['name'], r['population']) cur.execute("SELECT Name, CountryCode, District, Population FROM CITY\
where CountryCode = 'CHN' AND Population > 500000") print("-----------------------------") for k in generate_namedtuple(cur):
print(k.name, k.population) cur.close()
cnx.close()

需要注意几点:

  • 使用map和namedtuple的时候,游标要使用fetchall()方法。一次行取出所有结果,然后调用map方法将所有的数据map到Record object上。
  • 返回的map object可以调用for方法进行遍历。map object类似一个Record object列表。
  • namedtuple生成的对象,访问的时候是用dot来访问数据的。
  • 使用yield和dict zip返回的是iterator对象,这在性能上应该更有优势。
  • cur.fetchmany()返回的rowcount是有cursor.arraysize决定的。默认的是1,可以自行决定每次返回的数量。cur.fetchmany(size)
  • 使用yield和dict zip返回的iterator对象,每一个是一个dict对象。

Python 处理数据库返回结果的更多相关文章

  1. python查询数据库返回数据

    python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymy ...

  2. python 查询数据库返回的数据类型

    self.conn=MySQLdb.connect(host='localhost',port=3306, user='keystone', passwd='OptValley@4312', db=s ...

  3. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  4. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...

  5. 使用Python管理数据库

    使用Python管理数据库   这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...

  6. Python实现数据库一键导出为Excel表格

    依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为ex ...

  7. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  8. Python处理数据库

    使用数据库驱动连接数据库 (Connection对象) 打开游标(Cursor对象),并通过它执行SQL语句(execute方法) 提交操作(commit()) 关闭连接(close()) ORM将表 ...

  9. python sqlite3 数据库操作

    python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...

随机推荐

  1. 安装sphinx

    安装Sphinx全文检索服务器 Sphinx默认不支持中文索引及检索, 以前用Coreseek的补丁来解决,目前Coreseek 不单独提供补丁文件,而基于sphinx开发了Coreseek 全文检索 ...

  2. linux下共享内存mmap和DMA(直接访问内存)的使用 【转】

    转自:http://blog.chinaunix.net/uid-7374279-id-4413316.html 介绍Linux内存管理和内存映射的奥秘.同时讲述设备驱动程序是如何使用“直接内存访问” ...

  3. 欧拉工程第73题:Counting fractions in a range

    题目链接:https://projecteuler.net/problem=73 n/d的真分数 ,当d<=12000时 在 1/3 and 1/2 之间的有多少个 public class P ...

  4. js高程 第 4章 变量、作用域和内存问题 【笔记】

    4.4 小结 JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自以下 5 种基本数据类型:Undefined.Null.Boolean.Number 和 Str ...

  5. windows任务设置定时

    windows 的Schedule Task .创建一个配置 1.点击"开始" 2.点击"控制面板" 3.双击"任务计划程序" 4.双击&q ...

  6. 3 Asking for more information

    1 Could you tell me more about your idea? 2 Could I hear more about your idea? 3 Could you expain yo ...

  7. python之https爬虫出现 SSL: CERTIFICATE_VERIFY_FAILED (同时打开fiddler就会出现)

    1.参考 Py 坑之 CERTIFICATE_VERIFY_FAILED Python 升级到 2.7.9 之后引入了一个新特性,当你urllib.urlopen一个 https 的时候,会验证一次 ...

  8. 【Java/Spring】Spring的配置问题,IDEA报错“No mapping found for HTTP request with URI […] in DispatcherServlet”

    从SVN上拷贝下JavaWeb项目,Spring框架的配置文件需要修改.部署好Tomcat后,启动服务,可以进入Web项目主页,但是访问其他URL时直接跳转到404,IDEA报错“No mapping ...

  9. 计蒜客 31447 - Fantastic Graph - [有源汇上下界可行流][2018ICPC沈阳网络预赛F题]

    题目链接:https://nanti.jisuanke.com/t/31447 "Oh, There is a bipartite graph.""Make it Fan ...

  10. 让 linux centos 文件夹地址栏 位置栏显示出来的方法

    今天又拿起心爱的 linux ,发现多日不用又忘记了不少知识了    , 发现忘记的速度真是惊人的! 设置方法: 编辑-> 首选项-> 勾选 总是在浏览器窗口中打开,  如图: