众所周知,Python连接Oracle数据库,一般都使用cx_Oracle这个包。

但关键是cx_Oracle这个包,返回的结果,都是元组或者列表。

如以下代码:

 1 import cx_Oracle
 2 import os
 3
 4 os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
 5
 6 connection = cx_Oracle.connect("Booker", "123456", "172.18.240.31:1521/Book")
 7
 8 cursor = connection.cursor()
 9 cursor.execute(" select * from book",)
10
11 a = cursor.fetchall()
12 for c in a:
13     print(c)
14
15 cursor.close()
16 connection.close()

其返回的结果如下:

('PHP',  '黄大力', '外星出版社', '34')

这是一个元组。无法返回包含字段名的字典格式。

查阅cx_Oracle的官方文档:https://oracle.github.io/python-cx_Oracle/

也没有找到相应的方法。

对于我这种强迫症的人来说,这是不可接受的。

能不能有其它的办法呢?找了一下,发现cursor有一个属性description,是显示字段的描述的,打印看看是什么结果:

print(cursor.description)

显示如下:

[ ('book_name', <class 'cx_Oracle.STRING'>, 300, 900, None, None, 1),, ('author', <class 'cx_Oracle.STRING'>, 300, 900, None, None, 1), ('public', <class 'cx_Oracle.STRING'>, 300, 900, None, None, 1), ('price', <class 'cx_Oracle.STRING'>, 300, 900, None, None, 1)]

是一个列表,而每一个字段则是一个元组,元组的第一个元素则是字段名。

查阅cx_Oracle的官方文档,其对cursor.description是这么描述的:

该只读属性是7项序列的序列。这些序列中的每一个都包含描述一个结果列的信息:(name,type,display_size,internal_size,precision,scale,null_ok)。对于不返回行的操作,或者如果游标execute()尚未通过该方法调用操作,此属性将为None 。

该类型将是模块级别定义的类型对象之一。

这就好办了。

for d in cursor.description:print(d)

输出:

('book_name', <class 'cx_Oracle.STRING'>, 20, 60, None, None, 0)
('author', <class 'cx_Oracle.DATETIME'>, 23, None, None, None, 1)
('public', <class 'cx_Oracle.STRING'>, 20, 60, None, None, 1)
('price', <class 'cx_Oracle.STRING'>, 300, 900, None, None, 1)

嗯,对的,每一个元素都是一个元组,我们就可以通过d[0]把字段名取出来了。

for d in cursor.description:print(d[0])

输出:

book_name
author
public
price

那这样,我们就可以使用一个for循环,把字段名取出来。以下这段语句,是循环cursor.description,取出第1个元素,然后组成一个列表。

cols = [d[0] for d in cursor.description]
print(cols)

输出:

['book_name', 'author', 'public', 'price']

那么,怎么和查询结果组合成字典呢?嗯,使用zip函数。

zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。

zip() 函数语法:

zip(iterable1,iterable2, ...)

参数说明:

  • iterable -- 一个或多个可迭代对象(字符串、列表、元祖、字典)

没错,字符串、列表、元组、字典都是可迭代对象。

zip函数就像一个拉链一下,把两个可迭代对象的元素一一对应起来。如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。

使用以下代码,即可形成字段名和结果的字典了。

 1 import cx_Oracle
 2 import os
 3
 4 os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
 5
 6 connection = cx_Oracle.connect("Booker", "123456", "172.18.240.31:1521/Book")
 7 cursor = connection.cursor() cursor.execute("select * from book")
 8 a = cursor.fetchall()
 9 cols = [d[0] for d in cursor.description]
10 print(cols)
11 for row in a:
12   b = dict(zip(cols, row))
13   print(b['book_name'])
14 cursor.close()
15 connection.close()

输出:

PHP

这样我们就可以使用b['字段名']的方式进入各种操作了,又清晰又方便。

转载于:https://www.cnblogs.com/dhanchor/p/11111247.html

Python连接Oracle数据库,以字典形式返回结果相关推荐

  1. python连接本机oracle数据库吗,用Python连接Oracle数据库容易吗?

    ello,大家好!本次介绍的内容是如何使用Python连接Oracle数据库!看起来很简单,但实际上就是这么简单.学习本节内容后,相信老铁们能用Python撸起你们那庞大的Oracle数据库了.Wel ...

  2. Python 技术篇-连接oracle数据库并执行sql语句实例演示,python连接oracle数据库oci详细配置方法

    Python 连接 Oracle 数据库 第一章:连接 oracle 数据与环境配置 ① 连接 oracle 数据库效果演示 ② oci 下载 ③ oci 配置 ④ 环境变量配置 ⑤ 检测是否有 or ...

  3. 【Oracle】Python 连接Oracle 数据库

    From: http://space.itpub.net/22664653/viewspace-711728 Python 连接Oracle 数据库,需要使用cx_Oracle 包. 1 下载cx_O ...

  4. python连接oracle数据库 插入clob类型数据

    python连接oracle数据库 插入clob类型数据 连接数据库 import cx_Oracle as cx #导入模块 con = cx.connect('root', 'root123', ...

  5. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解

    本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://pypi.python.org/pypi/cx_Ora ...

  6. python连接oracle数据库_深入理解Python3.6连接Oracle数据库

    Python3.6连接Oracle数据库的方法详解 本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://p ...

  7. [转载] python——连接Oracle数据库

    参考链接: Python中的Oracle数据库连接 前言 Python自带的模块中有很多操纵文件的.我们可以把文件的数据读出来,经过处理还可以将数据写入文件中.但是对于数据的管理和分析来说,数据库还是 ...

  8. python连接oracle数据库_Python连接oracle数据库 例子一

    step1:下载cx_Oracle模块,cmd--pip install cx_Oracle step2: 1 import cx_Oracle #引用模块cx_Oracle 2 conn=cx_Or ...

  9. linux python连接oracle数据库_Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法...

    本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL.Oracle.SQL Server数据库. 其中包括以下几个软件的安装及配置: ...

最新文章

  1. 推荐一些算法方面的好书
  2. Android开发之使用SharedPreferences实现QQ登陆的选项框记忆功能(源代码分享)
  3. 设置ComboBox控件的边框颜色.
  4. 简单看java异常栈
  5. BP算法,用梯度下降法更新权值W与偏置项b
  6. 阿里云异构计算产品是如何保障双11业务的
  7. win10解决java多版本java -version问题
  8. java对象和字符串转换_java中字符串和JSON对象、Bean之间的相互转换
  9. 1.5 欠拟合和过拟合
  10. Python+OpenCV+PyQt5+多线程实现桌面监控程序
  11. Webots中创建舵轮模型
  12. matlab逆变换法产生随机数_用matlab产生随机数
  13. HttpCore和HttpClient
  14. Others8_如何在Chrome中导入和导出密码
  15. Echarts散点象限图
  16. python爬虫和数据分析的书籍_豆瓣书籍数据爬取与分析
  17. JAVA 面试宝典新版
  18. 《南茜的早晨》与《亡命鸡礼花》的dvd和原声音乐cd……大雅与大俗……Orz
  19. zigbee_蓝牙_wifi的比较与区别分析
  20. 让爱永不过期,三公仔给你“旧药换新”

热门文章

  1. 多并发-最后刷新页面
  2. ubuntu下配置bind9为局域网的DNS服务器
  3. 链路层的封装方式与IP选路 (二)
  4. 技巧 | Java 8 Stream 中异常处理的4种方式
  5. 分布式架构知识体系必读
  6. Spring Boot开启的2种方式
  7. Android: Bundle机制
  8. 使用redis实现异步消息队列
  9. 网络:url?uri?
  10. Java:假设车库有3个车位(可以通过boolean[]数组来表示车库)可以停车,写一个程序模拟多个用户开车离开,停车入库的效果。注意:车位有车时不能停车。