数据库连接池返回结果类型设置分析

使用场景,设置数据库返回结果为字典类型:

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)解析相关推荐

  1. MySQLdb.cursors AttributeError: 'module' object has

    原来ubuntu 12.04 python-mysqldb只需要import MySQLdb就可以使用MySQLdb.cursors.DictCursor(字典游标) 不过最近不知道python的原因 ...

  2. python中fetchall_Python MySQLDB:获取lis中fetchall的结果

    这个老问题出现在谷歌搜索扁平数据库查询,所以这里有更多的建议... 其他的答案使用fetchall(),它首先加载内存中的所有行,然后遍历这些行以生成一个新列表.可能效率不高.可以与MySQL所谓的s ...

  3. python cursor游标重置位置scroll_MySQL的游标

    python操作mysql 安装 python操作mysql数据库,主要就是通过pymysql模块 pip install pymysql 操作流程 1)建立数据库连接对象 conn 2)通过 con ...

  4. python进行数据查询_如何进行python数据库查询?(实例解析)

    在这篇文章之中我们来了解一下关于python数据库的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于python查询数据库中 ...

  5. libmysqld_dev linux,Linux下python玩转MySQLdb

    (0)目录 Linux下python玩转MySQLdb 一:起因 (1)Linux下安装python的第三方模块 ---- MySQLdb,自己走了很多弯路,在此做一下总结,希望对于像我一样的初学者有 ...

  6. [转载] python中的MySQLdb模块

    参考链接: Python中的MYSQLdb连接 Python中MySQLdb模块的使用 python下连接数据库存取数据比c++方便多了,真是越来越爱python了. 首先安装MySQLdb模块,直接 ...

  7. 【阿尼亚喜欢BigData】“红亚杯”数据分析进阶—使用Python操作Hive专题赛——满分解析③

    大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"数据分析进阶-使用Python操作Hive专题赛--满分解析系列 ...

  8. Python培训分享:Python内置标准异常及其解析

    本期小编为大家带来的Python培训教程是关于"Python内置标准异常及其解析"的内容,我们都知道,在Python技术运作下,总会出现一些Python无法正常处理的程序时就会发生 ...

  9. python中if __name__ == '__main__': 的解析

    2019独角兽企业重金招聘Python工程师标准>>> python中if __name__ == '__main__': 的解析 当你打开一个.py文件时,经常会在代码的最下面看到 ...

最新文章

  1. 大学c语言11页,C语言程序设计题库(11页)-原创力文档
  2. python简单网页服务器示例
  3. 用“龙头”促发展,以“立体”筑生态,长沙生物医药产业集群跑出“加速度”
  4. python列拼接dataframe_如何将两个dataframe中的两列合并为新dataframe(pandas)的一列?...
  5. 双塔模型没效果了?请加大加粗!
  6. 数字图像处理实验6图像编码
  7. Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数
  8. python用pip安装wordcloud_如何在python3.7中使用pip安装wordcloud
  9. 用VC++实现console程序显示彩色文本
  10. 如何做一个国产数据库(三)
  11. fcn+caffe+siftflow实验记录
  12. import package java_java初学者,如何理解package和import?
  13. ubuntu下搭建erlang编程环境
  14. [NOI导刊2010提高]黑匣子
  15. [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题 (2)
  16. 计算机键盘指示灯不亮也不启动不了机,电脑开不开机,显示器无反应,键盘指示灯不亮,主...
  17. 华为手机助手上架流程_华为手机助手导入音乐文件在哪里看 详细步骤介绍
  18. RNN分类IMDB电影评分
  19. Word2Vec与文章相似度
  20. java lpad oracle_「oracle」lpad函数和rpad函数详解

热门文章

  1. 【电路设计】肌电信号采集电路分析
  2. POJ 1835 宇航员_不见不散的结局是曲终人散_新浪博客
  3. Servlet之间跳转
  4. 光学镜头参数之—分辨率
  5. 「题解」清华集训 2016 你的生命已如风中残烛
  6. 金融经济学研究什么?
  7. docker-registry 私有仓库镜像 之 查看与删除
  8. Nature雄文指引绿色金融研究-内附丰富低碳数据
  9. Metasploit——msfvenom免杀木马
  10. python简述文件的操作步骤_Python文件读取操作的详细介绍