先来看一个简单的利用python调用sqlplus来输出结果的例子:
import osimport sysfrom subprocess import Popen, PIPE sql = """set linesize 400col owner for a10col object_name for a30 select owner, object_name from dba_objects where rownum用Python查询Oracle,当然最好用cx_Oracle库,但有时候受到种种限制,不能安装Python第三方库,就得利用现有资源,硬着头皮上了。
用Python调用SqlPlus查询Oracle,首先要知道SqlPlus返回结果是什么样的:
(这是空行)Number Name Address------------ ----------- ------------------1001 张三 南京路1002 李四 上海路登录后复制
第1行是空行,第2行是字段名称,第3行都是横杠,有空格隔开,第4行开始是查询到的结果。
在查询结果规整的情况下,根据第3行可以很清晰的看到结构,用Python解析起来也比较方便。但是,如果一张表字段特别多,记录数也相当多,那么默认情况下调用SqlPlus查询出的结果会比较乱,这就需要在调用查询之前做一些设定,比如:
立即学习“Python免费学习笔记(深入)”;
set linesize 32767set pagesize 9999set term off verify off feedback off tab offset numwidth 40登录后复制
这样的调用查询结果就比较规整了。接下来就是用强大的Python来解析查询结果。
这里封装了一个函数,可以根据传入的SQL语句查询并解析结果,将每行结果存到列表中,列表中的每个元素是一个字段名称与值的映射。
#!/usr/bin/python#coding=UTF-8'''@author: 双子座@开源中国@summary: 通过SqlPlus查询Oracles数据库'''import os;os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'gStrConnection = 'username/password@10.123.5.123:1521/ora11g'#解析SqlPlus的查询结果,返回列表def parseQueryResult(listQueryResult): listResult = [] #如果少于4行,说明查询结果为空 if len(listQueryResult)其中os.environ['NLS_LANG']的值来自
select userenv['language'] from dual;登录后复制在调用的时候,只要类似:
listResult = QueryBySqlPlus('select * from studentinfo')登录后复制
然后就可以用循环打印出结果了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2536388.html
赞 (0)python调用fortran模块上一篇 2025年3月5日 23:24:23聊聊PHP如何处理数字和字母下一篇 2025年3月5日 12:30:50AD推荐 黄金广告位招租... 更多推荐