参考资料:python 连接oracle -- sqlalchemy及cx_Oracle的使用详解

  oracle指定表缺失值统计 -- 基于cx_Oracle

import pandas as pd
import cx_Oracle as orcl # 批量查询数据缺失率
def missing_count(table_name, where_condition={}, **engine):
#where 条件参数化, str或dict
sql_tab_columns = "select column_name from user_tab_columns \
where table_name = '{}'".format(table_name) db = ConnectOracle(**engine)
#sql_select.encode('utf-8')
columns = db.select_oracle(sql=sql_tab_columns) #生成select语句
ss = ''
for col in columns.COLUMN_NAME:
ss += 'sum(decode({},null, 1, 0)) as {}, '.format(col, col)
ss = ss[:-2] #生成where条件
wh = ''
if where_condition:
wh += ' where '
if type(where_condition)==str:
wh += where_condition
if type(where_condition)==dict:
for key in where_condition.keys():
if type(where_condition[key])!=str:
wh += ('t.' + str(key) + ' = ' +
str(where_condition[key]) + ' and ')
else:
wh += ("t." + str(key) + " = '" +
str(where_condition[key]) + "' and ")
wh = wh[:-4] #print(ss)
sql_select = '''select count(*) as counts, {}
from {} t {}
'''.format(ss, table_name, wh) #print(sql_select)
res = db.select_oracle(sql=sql_select)
return pd.Series(res.values.tolist()[0], index=res.columns)

  缺失值统计2 -- 基于sqlalchemy

import pandas as pd
#import cx_Oracle as orcl
from sqlalchemy import create_engine # 批量查询数据缺失率
def missing_count(table_name, where_condition={}, **config):
#where 条件参数化, str或dict #定义数据库连接
#'oracle://qmcbrt:qmcbrt@10.85.31.20:1521/tqmcbdb'
engine = 'oracle://{username}:{passwd}@{host}:{port}/{sid}'.format(**config) #dbname -- 各版本语法不同
db = create_engine(engine)
#pd.read_sql_query(sql_tab_columns, db)
#db.execute('truncate table {}'.format(ttb)) #查询列名 -- 用于生成select项
sql_tab_columns = "select column_name from user_tab_columns where table_name = '{}'".format(table_name)
columns = pd.read_sql_query(sql_tab_columns, db) #生成select项
ss = ''
for col in columns.column_name:
ss += 'sum(decode({}, null, 1, 0)) as {}, '.format(col, col)
ss = ss[:-2] #生成where条件
wh = ''
if where_condition:
wh += ' where '
if type(where_condition)==str:
wh += where_condition
if type(where_condition)==dict:
for key in where_condition.keys():
if type(where_condition[key])!=str:
wh += ('t.' + str(key) + ' = ' +
str(where_condition[key]) + ' and ')
else:
wh += ("t." + str(key) + " = '" +
str(where_condition[key]) + "' and ")
wh = wh[:-4] #select语句
sql_select = '''select count(*) as counts, {} from {} t {} '''.format(ss, table_name, wh) #pd.Series(res.values.tolist()[0], index=res.columns)
res = pd.read_sql_query(sql_select, db)
return res.iloc[0,:]

  示例

config = {
'username':'qmcb',
'passwd':'qmcb',
'host':'localhost',
'port':'1521',
'sid':'tqmcbdb'
}
where_condition = {
'is_normal': 1,
'is_below_16': 0,
'is_xs': 0,
'is_cj': 0,
'is_dead': 0,
'AAE138_is_not_null': 0,
'is_dc': 0,
'is_px': 0
}
# 计算 QMCB_KM_2019_1_31_1 表的数据缺失数
missing_count('QMCB_KM_2019_1_31_1', where_condition, **config)

  

  

python 连接 oracle 统计指定表格所有字段的缺失值数的更多相关文章

  1. python 连接oracle -- sqlalchemy及cx_Oracle的使用详解

    python连接oracle -- sqlalchemy import cx_Oracle as orcl import pandas as pd from sqlalchemy import cre ...

  2. python 连接 Oracle 乱码问题(cx_Oracle)

    用python连接Oracle是总是乱码,最后发现时oracle客户端的字符编码设置不对. 编写的python脚本中需要加入如下几句: import os os.environ['NLS_LANG'] ...

  3. python连接Oracle的方式以及过程中遇到的问题

    一.库连接步骤 1.下载cx_Oracle模块 下载步骤 工具 pycharm :File--->右键setting--->找到Project Interpreter  -----> ...

  4. Python连接Oracle数据查询导出结果

    python连接oracle,需用用到模块cx_oracle,可以直接pip安装,如网络不好,可下载离线后本地安装 cx_oracle项目地址:https://pypi.org/project/cx_ ...

  5. Python 连接 Oracle数据库

    1.环境设置 [root@oracle ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@oracle ~]# python - ...

  6. Python 连接Oracle数据库

    连接:python操作oracle数据库  python——连接Oracle数据库 python模块:cx_Oracle, DBUtil 大概步骤: 1. 下载模块 cx_Oracle (注意版本) ...

  7. Python连接oracle数据库 例子一

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

  8. python连接oracle导出数据文件

    python连接oracle,感觉table_list文件内的表名,来卸载数据文件 主脚本: import os import logging import sys import configpars ...

  9. Python连接Oracle问题

    Python连接Oracle问题 1.pip install cx_oracle 2.会出现乱码问题:     方法一:配置环境变量     export NLS_LANG="SIMPLIF ...

随机推荐

  1. Java 中断

    https://zhuanlan.zhihu.com/p/45667127 看的似懂非懂

  2. CentOs系统设置python版本

    一.针对当前终端生效 最近云服务器安装了centos7系统,python默认版本是2.7.5,但是习惯用anaconda3, 安装anaconda3之后将系统默认python版本更改为python3. ...

  3. webview元素定位

    genymotion 模拟器:android  5.0.0 python 2.7 appium 1.4.16.1 1.app原生元素定位(常用) driver.find_element_by_id(“ ...

  4. shell脚本中if

    [[ $i =~ ^[0-9]+$ ]] && echo 1 的解释 =~ 表示的是匹配 && 是前一个命令为真 才执行后一个命令 [[ ]] 是if判断使用正则表达式 ...

  5. spring/java ---->记录和整理用过的注解以及spring装配bean方式

    spring注解 @Scope:该注解全限定名称是:org.springframework.context.annotation.Scope.@Scope指定Spring容器如何创建Bean的实例,S ...

  6. Random库 --Python3

    随机数是随机试验的结果,是计算机通过随即种子根据一定算法计算出来的,随机种子通常可以由系统时钟产生.下面是random库中基本方法: 1.random():产生一个0到1之间的随机浮点数:0<= ...

  7. 康拓展开-排列的hash

    对于一个集合内所有元素的排列,康拓展开是一个无冲突的hash法.其规则便是将排列在逻辑上排好序,然后每个排列的序号即是hash值. 关键就在如何快速求出序号和快速还原啦. 首先我们确定一好集合内各元素 ...

  8. sql中的limit关键字

    转载于:https://blog.csdn.net/benweizhu/article/details/7892788 一.基本 SQL的limit语法的如以下形式 SELECT * FROM tab ...

  9. .net core 使用 ef core

    第一步: 创建一个.net core console app. 第二步:安装EFCore package 和  design(以前vs是有EF项目模板的,core版本现在没有,所有安装这个工具来创建M ...

  10. mybatis源码解析之环境准备

    概述 对于mybatis而言,大家一定都不陌生,我相信很多同学都跟我一样,用起来非常的熟练,但是其内部的实现原理呢,不太清楚,经常面试的时候,面试官问及这方面的知识,都只能尴尬的回答不知道,或者不清楚 ...