游标执行后返回的结果都只是数据,但是不带有列名标识。这里需要处理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. 【转】RHadoop实践系列之一:Hadoop环境搭建

    RHadoop实践系列之一:Hadoop环境搭建 RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析.Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来 ...

  2. oracle DB_LINK

    1.先创建远程数据库服务名(注意,如果服务器既有oracle服务端又有客户端,需要在服务端的tnsnames.ora中配置服务名,否则会报如下错误): SQL> select count(*) ...

  3. lsattr, chattr

    lsattr $lsattr #查看文件的隐藏属性 $lsattr -------------e- ./bookmarks-2016-10-11.json -------------e- ./rxvt ...

  4. python抓取网页中图片并保存到本地

    #-*-coding:utf-8-*- import os import uuid import urllib2 import cookielib '''获取文件后缀名''' def get_file ...

  5. Java【小考】

    课上, 老师出了一个题: 考察:1.类的定义 2.类的属性 3.类的方法.重载.构造方法.代码块 题目是这样的: 设计 一个 类:Tree 要求: 1.包含main方法 2.属性:静态: String ...

  6. php实现SESSION跨域

    稍微大一点的网站,通常都会有不只一个服务器,每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二级域名,比如www.a.com.i.a.com.bbs.a.com.而一个整体性强的网站,用 ...

  7. [转]ASP.NET MVC Dynamic Themes

    本文转自:http://www.codeproject.com/Articles/32847/ASP-NET-MVC-Dynamic-Themes Download source code - 148 ...

  8. 用CSS开启硬件加速来提高网站性能(转)

    翻译文章,原文地址:http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-cs ...

  9. (七)中介者模式-C++实现

    用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其解耦合松散而且可以独立地改变他们之间的交互. 中介者模式适合于 系统中不希望对象之间直接交互,即不希望类之间相互包含, ...

  10. SQL 编程

    用SQL编写程序首先我们要了解SQL的一些编程方法 1.使用变量 变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据. (1)局部变量 T-SQL中,局部变量的名称必须以标记@作为前缀 ...