python .cursor(cursorclass=MySQLdb.cursors.DictCursor)解析
数据库连接池返回结果类型设置分析
使用场景,设置数据库返回结果为字典类型:
import MySQLdb
from DBUtils.PooledDB import PooledDB# 建立数据库连接池
pool = PooledDB(creator, maxconnections, host, user, passwd, db, port, charset)
# 实现连接
conn = pool.connection()
# 设置返回数据类型
conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
查看PooledDB源码,pool.connection()的return返回值是PooledSharedDBConnection(con)。在方法中会经过steady_connection(),SharedDBConnection(con)方法的调用。而steady_connection()方法用到了DBUtils.SteadyDB.connect(),其中connect()的返回SteadyDBCursor()调用。
在DBUtils.SteadyDB.connect()的调用中,实际上已经是在调用数据库连接的的方法。也就是已经在使用MySQLdb开始连接数据库了。此时的DBUtils.SteadyDB.connect()相当于MySQLdb.Connection(),SteadyDBCursor()相当于MySQLdb.Connection.cursor(),也只有这时候才可以向cursor传递参数。(见思维导图1)
那向cursor传递参数,使用到的方法又有哪些呢?
查看MySQLdb.Connection()源码,子方法cursor( cursorclass=None )中的cursorclass来自kwargs2.pop(‘cursorclass’, elf.default_cursor),其中的default_cursor在一开始被赋值为cursors.Cursor(调用了MySQLdb.cursors.Cursor)。
在MySQLdb.cursors中有Cursor、DictCursor两种类型。他们的参数分别为:Cursor(CursorStoreResultMixIn, CursorTupleRowsMixIn,BaseCursor)、DictCursor(CursorStoreResultMixIn, CursorDictRowsMixIn,BaseCursor)。实际区别在于_fetch_type的赋值,Cursor()返回为0,DictCursor()返回为1。_fetch_type在MySQLdb.cursors.BaseCursor._fetch_row()中调用到该参数。_fetch_row()方法返回的是_result.fetch_row(size, self._fetch_type)。_result方法则是继承自_mysql.result()。
在_mysql.result()源码中可以看到关于_fetch_type=1时,返回的结果为dictionaries。
python .cursor(cursorclass=MySQLdb.cursors.DictCursor)解析相关推荐
- MySQLdb.cursors AttributeError: 'module' object has
原来ubuntu 12.04 python-mysqldb只需要import MySQLdb就可以使用MySQLdb.cursors.DictCursor(字典游标) 不过最近不知道python的原因 ...
- python中fetchall_Python MySQLDB:获取lis中fetchall的结果
这个老问题出现在谷歌搜索扁平数据库查询,所以这里有更多的建议... 其他的答案使用fetchall(),它首先加载内存中的所有行,然后遍历这些行以生成一个新列表.可能效率不高.可以与MySQL所谓的s ...
- python cursor游标重置位置scroll_MySQL的游标
python操作mysql 安装 python操作mysql数据库,主要就是通过pymysql模块 pip install pymysql 操作流程 1)建立数据库连接对象 conn 2)通过 con ...
- python进行数据查询_如何进行python数据库查询?(实例解析)
在这篇文章之中我们来了解一下关于python数据库的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于python查询数据库中 ...
- libmysqld_dev linux,Linux下python玩转MySQLdb
(0)目录 Linux下python玩转MySQLdb 一:起因 (1)Linux下安装python的第三方模块 ---- MySQLdb,自己走了很多弯路,在此做一下总结,希望对于像我一样的初学者有 ...
- [转载] python中的MySQLdb模块
参考链接: Python中的MYSQLdb连接 Python中MySQLdb模块的使用 python下连接数据库存取数据比c++方便多了,真是越来越爱python了. 首先安装MySQLdb模块,直接 ...
- 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析③
大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...
- Python培训分享:Python内置标准异常及其解析
本期小编为大家带来的Python培训教程是关于"Python内置标准异常及其解析"的内容,我们都知道,在Python技术运作下,总会出现一些Python无法正常处理的程序时就会发生 ...
- python中if __name__ == '__main__': 的解析
2019独角兽企业重金招聘Python工程师标准>>> python中if __name__ == '__main__': 的解析 当你打开一个.py文件时,经常会在代码的最下面看到 ...
最新文章
- 大学c语言11页,C语言程序设计题库(11页)-原创力文档
- python简单网页服务器示例
- 用“龙头”促发展,以“立体”筑生态,长沙生物医药产业集群跑出“加速度”
- python列拼接dataframe_如何将两个dataframe中的两列合并为新dataframe(pandas)的一列?...
- 双塔模型没效果了?请加大加粗!
- 数字图像处理实验6图像编码
- Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数
- python用pip安装wordcloud_如何在python3.7中使用pip安装wordcloud
- 用VC++实现console程序显示彩色文本
- 如何做一个国产数据库(三)
- fcn+caffe+siftflow实验记录
- import package java_java初学者,如何理解package和import?
- ubuntu下搭建erlang编程环境
- [NOI导刊2010提高]黑匣子
- [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题 (2)
- 计算机键盘指示灯不亮也不启动不了机,电脑开不开机,显示器无反应,键盘指示灯不亮,主...
- 华为手机助手上架流程_华为手机助手导入音乐文件在哪里看 详细步骤介绍
- RNN分类IMDB电影评分
- Word2Vec与文章相似度
- java lpad oracle_「oracle」lpad函数和rpad函数详解