Python学习之十八_获取神通数据库所有的表数据量
Python学习之十八_获取神通数据库所有的表数据量
背景
今天想获取一下所有数据库的表信息.但是发现神通数据库的系统表里面的表信息不正确
无法获取实际意义的表信息.
联系了下神通数据库的原厂高手. 给了一个存储过程可以进行相关的处理.
因为最近学习python(放下一周就忘记的七七八八了)
所以想一起验证一下两种方式的优劣.
存储过程的方式
发现执行 exec insert_table_num 耗时 17min,约合 1000秒.
因为需要穿件一个临时表, 不是完全无侵入的
CREATE TABLE table_num (
table_name VARCHAR2(255),
table_num NUMBER
);
CREATE OR REPLACE PROCEDURE insert_table_num IS
BEGIN
FOR t IN (SELECT table_name FROM user_tables) LOOP
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO table_num (table_name, table_num)
SELECT ''' || t.table_name || ''', COUNT(*) FROM ' || t.table_name;
EXCEPTION
when others then
null ;
END;
END LOOP;
END;
exec insert_table_num;
SELECT * FROM table_num ORDER BY table_num DESC
Python方式获取
STPython的方式一直不通
所以这次使用了jaydebeapi的方式连接数据库
方式跟存储过程是一个讨论
循环查询每个表的大小, 只不过Python是写入到一个文件.
存储过程是写入一个表.
存储过程耗时 1000秒
Python耗时 847秒
说明Python也没有多慢.可能还少了一步插入数据库的操作,性能更优秀一下.
Python方式获取
1. ini配置文件定义数据库连接.
[OSCAR]
jdbcString=com.oscar.Driver
driverPath=./driver/oscarJDBC8.jar
urlString=jdbc:oscar://10.110.xxx.xxx:2003/osrdb
userName=xxxxxx
passWord=xxxxx?!
Python部分的代码为:
import configparser
import datetime
import jaydebeapi
config = configparser.ConfigParser()
config.read('oscar.ini',encoding='utf-8')
jdbcString = config.get('OSCAR', 'jdbcString')
driverPath = config.get('OSCAR', 'driverPath')
urlString = config.get('OSCAR', 'urlString')
userName = config.get('OSCAR', 'userName')
passWord = config.get('OSCAR', 'passWord')
connoscar = jaydebeapi.connect(jdbcString, urlString, [userName, passWord], driverPath)
comparesql = configparser.ConfigParser()
comparesql.read('comparesql.ini',encoding='utf-8')
tablenamesql = "SELECT TABLE_NAME FROM INFO_SCHEM.DBA_TABLES WHERE OWNER = 'GSCLOUD2103OSCAR' order by table_name "
fname = open('zhaobsh.txt','w',encoding='utf-8')
cur=connoscar.cursor()
cur.execute(tablenamesql)
tablename = cur.fetchall()
num = 0
starttime = datetime.datetime.now()
for i in tablename:
j = str(i)
gettablenum = ("select count(1) from " + j[2:-3])
try:
cur.execute(gettablenum)
except:
continue
num = cur.fetchall()
numstr = str(num)
result = (j[2:-3] + " 表的行数为: " + numstr[2:-3])
print(str(result))
fname.write(str(result) + '\n')
endtime = datetime.datetime.now()
seconds = (endtime - starttime).total_seconds()
print("执行时间为: " + str(seconds))
fname.write("执行时间为: " + str(seconds))
connoscar.close()
cur.close()
fname.close()
Python学习之十八_获取神通数据库所有的表数据量的更多相关文章
- python学习笔记--Django入门三 Django 与数据库的交互:数据建模
把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...
- Python学习二十八周(vue.js)
一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...
- Python学习日记(十八) 序列化模块
什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- Python学习第十八篇——低耦合函数设计思想
import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...
- Python学习(十八)—— 数据库(三)
转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一.数据操作 1.插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: ...
- JavaScript学习总结(十八)——JavaScript获取浏览器类型与版本
从网上找到一段使用JavaScript判断浏览器以及浏览器版本的比较好的代码,在此记录一下: 1 <script type="text/javascript"> 2 v ...
- Python学习札记(十八) 高级特性4 生成器
参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中 ...
- python学习 (二十八) Python的for 循环
1: for 循环可以循环如下类型: my_string = "abcabc" // 字符串类型 for c in my_string: print(c, end=' ') car ...
- python学习(十八) 程序打包
18.1 Distutils基础 18.2 打包 18.2.1 建立存档文件 18.2.2 创建Windows安装程序或RPM包 18.3 编译扩展 18.4 使用py2exe创建可执行程序
随机推荐
- 27、flutter Dialog 弹窗
AlertDialog //放在State<>之下 void _alertDialog() async { var result = await showDialog( barrierDi ...
- 微信小程序数组
常用函数 concat(): 连接两个或多个数组,返回连接后的新数组. 示例:const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = ...
- 电商业务容器化遇瓶颈,公有云Docker镜像P2P加速很安全
当前,电商平台会采用基于Docker的容器技术来承载618大促期间的一些关键业务版块,包括最简单的商品图片展示.订单详情页面等等. 通过容器化改造,电商平台的每个业务版块解耦,可以独立开发.部署和上线 ...
- Tarjan:这个算法大神
摘要:图的算法是进行静态分析的基础数据算法,如何提高图的分析效率,就需要对图的算法有进一步的认识. 1. 引言 在静态分析技术中, 我们常用会将代码转成抽象语法树(AST), 然后采用深度遍历(DFS ...
- 浅析华为云基于HBase MTTR上的优化实践
摘要:主要介绍华为云在HBase 2.x内核所做的一些MTTR优化实践. 本文分享自华为云社区<华为云在HBase MTTR上的优化实践>,作者: 搬砖小能手. 随着HBase在华为云的广 ...
- 实践GoF的设计模式:访问者模式
摘要:访问者模式的目的是,解耦数据结构和算法,使得系统能够在不改变现有代码结构的基础上,为对象新增一种新的操作. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:访问者模式> ...
- 面向对象的Python编程,你需要知道这些!
摘要:Python 没有像 java 中的"private"这样的访问说明符.除了强封装外,它支持大多数与"面向对象"编程语言相关的术语.因此它不是完全面向对象 ...
- AI论文解读:基于Transformer的多目标跟踪方法TrackFormer
摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...
- 云图说|一张图看懂一站式DevOps利器——华为云DevCloud
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云DevCl ...
- 2021 年如何学习 Android,一位 5 年中大厂老哥跟你聊聊
本文首发我的微信公众号:程序员徐公 大家好,我是程序员徐公,加上实习,有五年中大厂经验.今天,我们一起来聊一聊如何自学 Android. 光阴似箭,日月如梭,时间真的过得飞快. 加上实习,从事 And ...