Python 处理数据库返回结果
游标执行后返回的结果都只是数据,但是不带有列名标识。这里需要处理2个问题:
- 将返回的数据映射到每一列上
- 当返回的结果很大的时候,需要使用迭代器来提升性能。
解决上面的2个问题,在python里面可以采用下面的2种方式来处理。
- 使用namedtuple 和 map object。
- 使用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 处理数据库返回结果的更多相关文章
- python查询数据库返回数据
python查询数据库返回数据主要运用到flask框架,pymysql 和 json‘插件’ #!/usr/bin/python # -*- coding: UTF-8 -*- import pymy ...
- python 查询数据库返回的数据类型
self.conn=MySQLdb.connect(host='localhost',port=3306, user='keystone', passwd='OptValley@4312', db=s ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- python之数据库操作(sqlite)
python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...
- 使用Python管理数据库
使用Python管理数据库 这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...
- Python实现数据库一键导出为Excel表格
依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为ex ...
- 零基础学Python--------第11章 使用Python操作数据库
第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...
- Python处理数据库
使用数据库驱动连接数据库 (Connection对象) 打开游标(Cursor对象),并通过它执行SQL语句(execute方法) 提交操作(commit()) 关闭连接(close()) ORM将表 ...
- python sqlite3 数据库操作
python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...
随机推荐
- solrconfig.xml介绍
说明:请务必先了解如下知识,否则阅读本文会晕. Solr术语介绍:SolrCloud,单机Solr,Collection,Shard,Replica,Core之间的关系 Solr通过三个主要文件来作配 ...
- 小说一下case ~
case 这个关键词,用的地方不少~大部分的用途都通过以下的方式去应用 SELECT CASE @i END AS 测试1; 测试1 ----------- DECLARE @Hour INT = D ...
- Linux JDK 安装
1,下载JDK(Linux版) 官网下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2, 建立java目录 ...
- React Native初试:Windows下Andriod环境搭建
最近想写个App,又觉得Native App 太无趣了Web App又没那么成熟然后发现了Facebook在9月发布的React Native比较新奇,所以决定捣鼓看看: React Native为F ...
- django自动化部署脚本
while read line;do echo'kill '$line; kill $line; done < /tmp/celeryd.pid while read line;do echo' ...
- canvas作为背景
比如canvas的id是HB, 画好后执行document.body.style.background = "url('"+HB.toDataURL()+"')" ...
- 【JAVA小结】字符串比较是否相等
public class CompareObject1 { public static void main(String[] args) { String str1 = new String(&quo ...
- 理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...
- Neutron VxLAN + Linux Bridge 环境中的网络 MTU
1. 基础知识 1.1 MTU 一个网络接口的 MTU 是它一次所能传输的最大数据块的大小.任何超过MTU的数据块都会在传输前分成小的传输单元.MTU 有两个测量层次:网络层和链路层.比如,网络层 ...
- 单机搭建Android开发环境(五)
前文介绍了Android系统开发环境的搭建,本文将简单介绍Android应用开发环境的搭建. 基于Android Studio搭建应用开发环境,相比使用Eclipse简单得多.Android Stud ...