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学习之十八_获取神通数据库所有的表数据量的更多相关文章

  1. python学习笔记--Django入门三 Django 与数据库的交互:数据建模

    把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...

  2. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  3. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

  4. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  5. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  6. Python学习(十八)—— 数据库(三)

    转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一.数据操作 1.插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: ...

  7. JavaScript学习总结(十八)——JavaScript获取浏览器类型与版本

    从网上找到一段使用JavaScript判断浏览器以及浏览器版本的比较好的代码,在此记录一下: 1 <script type="text/javascript"> 2 v ...

  8. Python学习札记(十八) 高级特性4 生成器

    参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中 ...

  9. python学习 (二十八) Python的for 循环

    1: for 循环可以循环如下类型: my_string = "abcabc" // 字符串类型 for c in my_string: print(c, end=' ') car ...

  10. python学习(十八) 程序打包

    18.1  Distutils基础 18.2 打包 18.2.1 建立存档文件 18.2.2 创建Windows安装程序或RPM包 18.3 编译扩展 18.4 使用py2exe创建可执行程序

随机推荐

  1. PyTorch项目源码学习(1)

    PyTorch PyTorch是一个开源的深度学习框架,项目地址 https://github.com/pytorch/pytorch 在学术工作中的使用频率较高.其主体由C++开发,PyTorch是 ...

  2. 17、Flutter StatelessWidget 、 StatefulWidget

    在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget/StatefulWidget. StatelessWidget是无状态组件,状态不可变的widget Stat ...

  3. picker组件增加搜索item条目的功能

    picker组件顶部有搜索框,能搜索条目,如果条目很多的时候,上下翻很麻烦了,而且不容易找到,可以先全查,然后js搜索 wxml <button bindtap="openFlag&q ...

  4. 如何使用loki查询日志中大于某一数字的值的日志

    简介 loki是一款轻量级的日志收集中间件,比elk体系占用的内存更小,采用go语言开发,可以利用grafana来查询loki中存储的日志,loki存储日志只对提前预设的标签做索引,所以日志存储空间占 ...

  5. Boost程序库完全开发指南:1.2-C++基础知识点梳理

      主要整理了N多年前(2010年)学习C++的时候开始总结的知识点,好长时间不写C++代码了,现在LLM量化和推理需要重新学习C++编程,看来出来混迟早要还的. 1.const_cast <n ...

  6. C++篇:第三章_控制结构_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 三.控制结构 for循环的结束判定条件是boolean型 只要适当地修改代码,就 ...

  7. 论文推荐|TDSC2022 安全补丁识别最新的方案E-SPI

    摘要:TDSC 2022发表了安全补丁识别最新的方案"Enhancing Security Patch Identification by Capturing Structures in C ...

  8. SQL Server 2016 安装

    数据库安装 选择全新安装模式继续安装 输入产品秘钥:这里使用演示秘钥进行 接受许可 规则检测 可以后期再开放防火墙对外端口 选择需要安装的功能,想省事可以选择[全选] 可以安装JDK,这边选择取消 P ...

  9. 【已解决】无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported

    原因是最近xlrd更新到了2.0.1版本,只支持.xls文件.所以x1 = xlrd.open_workbook("data.xlsx")会报错. 可以安装旧版xlrd,在cmd中 ...

  10. LLVM 参考链接

    https://www.llvm.org/ LLVM Essentials(Paperback) LLVM 编译器 https://www.cs.cmu.edu/afs/cs.cmu.edu/acad ...