Python处理Oracle数据库的学习过程


背景

产品数据存在一些大小写敏感的数据迁移到不敏感的数据库时出现报错的情况.
基于此, 我这边跟帅男同学学习了下Python的使用.
因为这一块一直比较菜.所以想着进行一下总计和备忘. 感谢帅男提供的支持与帮助.

环境安装

https://download.jetbrains.com.cn/python/pycharm-community-2023.1.1.exe
下载最新的社区版.
理论上现在初学, 不需要使用企业版的高级特性. 安装使用就可以了.
建议可以使用 python 比较新的版本 pip 有比较新
https://www.python.org/ftp/python/3.11.3/python-3.11.3-amd64.exe
# 这个网站下载速度非常慢.

设置project 以及安装部分pip包

这次因为仅是初学, 只学习了 configparse 和 jaydebeapi 还有 datetime 的 三个pip包.
安装方式为:
第一 先命令行修改 pip 的源到国内, 不然速度非常慢
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 第二 右上角 齿轮按钮 点击进入 setting 进入 project 进入 Python Interpreter 点击 + 就可以进行添加.

新增代码设置

点击Project 的名字, 然后点击新增python 文件就可以了. 

可以输入命令进行处理 最简单的hello world

print("hello world")
在当前页面邮件 run 就可以了

读写数据库的设置

# coding=utf-8
# 设置编码格式 import jaydebeapi
import configparser
import datetime
# 引入需要的包 config = configparser.ConfigParser()
# 定义配置对象
config.read('zhaobsh.ini',encoding='utf-8')
# 读取配置文件
jdbcString = config.get('Info','jdbcString')
driverPath = config.get('Info','driverPath')
urlString = config.get('Info','urlString')
userName = config.get('Info','userName')
passWord = config.get('Info','passWord')
# 注意 Info 为 zhaobsh.ini 里面 [Info] 指定的配置节下的内容 fname = open('zhaobsh.txt','w',encoding='utf-8')
fnamesql = open('zhaobs.sql','w',encoding='utf-8')
# 注意打开同py目录下的一个文件, 可以写入, 编码格式是utf-8
fname.write(jdbcString + " " + driverPath)
# 可以尝试写入一个内容验证是否可以. conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)
# 设置数据库连接 cur = conn.cursor()
getdatasql = "select table_name,column_name from zhaobsh003"
# 打开游标, 设置查询使用的SQL cur.execute(getdatasql)
# 执行sql
tabledata = cur.fetchall()
# 将结果集转换到tabledata变量中
fname.write(str(datetime.datetime.now()))
starttime = datetime.datetime.now()
for tableinfo in tabledata :
print(tableinfo[0] + " " + tableinfo[1])
getsql = "select count(upper(" + str(tableinfo[1]) + ")) as " + str(tableinfo[0]) +" , upper(" + str(tableinfo[1]) +") from " + str(tableinfo[0]) + " group by upper(" + str(tableinfo[1]) +") having count(upper(" + str(tableinfo[1]) +")) >1 "
cur.execute(getsql)
duplication = cur.fetchall()
tablecheck = 0
for duplicationitem in duplication :
if tablecheck == 0 :
fnamesql.write(tableinfo[0] + '\n')
tablecheck = 1
fnamesql.write(str(tableinfo[0]) + " " + str(duplicationitem[0]) + " " + str(duplicationitem[1]) + '\n')
# sql取数相关以及写入文件
endtime = datetime.datetime.now()
seconds = (endtime - starttime).total_seconds()
print("执行时间为: " + str(seconds))
# 计算一下耗时
fname.close()
fnamesql.close()
cur.close()
# 关闭游标 避免泄漏

建表SQL为:

BEGIN
EXECUTE IMMEDIATE 'DROP TABLE zhaobsh001';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
create table zhaobsh001 as select col.TABLE_NAME,col.column_name from user_constraints con,user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.TABLE_NAME in (select TABLE_NAME from user_tables where num_rows > 1 );
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE zhaobsh002';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
create table zhaobsh002 as select table_name from (select count(col.TABLE_NAME),col.TABLE_NAME from user_constraints con,user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.TABLE_NAME in (select TABLE_NAME from user_tables where num_rows > 1 ) group by col.TABLE_NAME having(count(col.TABLE_NAME)) > 1 ) ;
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE zhaobsh003';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
/
create table zhaobsh003 as select table_name,column_name from zhaobsh001 where TABLE_NAME not in (select table_name from zhaobsh002) ; ## 这是一个sql语法的方法
select 'select count(upper('||column_name||')) as '|| table_name ||' , upper('||column_name||') from '||table_name||' group by upper('||column_name||') having count(upper('||column_name||')) >1 ; ' from zhaobsh003

配置文件的格式为

[Info]
jdbcString=oracle.jdbc.driver.OracleDriver
driverPath=./driver/ojdbc8-19.3.0.0.jar
urlString=jdbc:oracle:thin:@//10.110.xx.xxx:1521/Oracle_sid
userName=yourdatabasename
passWord=somePassword

Python处理Oracle数据库的学习过程的更多相关文章

  1. python——连接Oracle数据库

    前言 Python自带的模块中有很多操纵文件的.我们可以把文件的数据读出来,经过处理还可以将数据写入文件中.但是对于数据的管理和分析来说,数据库还是专业一些.如果Python能和数据库结合在一起,那么 ...

  2. python对oracle数据库的操作

    1          Oracle数据库 1.1       Oracle环境配置&客户端连接 1.1.1          下载安装Oracle绿色版客户端instantclient: 到o ...

  3. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  4. Python 连接 Oracle数据库

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

  5. Python 连接Oracle数据库

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

  6. python操作oracle数据库

    本文主要介绍python对oracle数据库的操作学习 包含:oracle数据库在Windows操作系统下的安装和配置.python需要安装的第三方拓展包以及基本操作的样例学习. 1          ...

  7. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  8. Python操作Oracle数据库:cx_Oracle

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  9. 【python】python连接Oracle数据库

    python连接Oracle数据库 查看Oracle版本 select * from v$version 下载对应版本的InstantClient 下载网址 InstantClient 1.解压Ins ...

  10. python 连接oracle 数据库

    我们在测试中可能需要对oracle 数据库进行操纵,比如这样一个场景,在往oracle 里面插数据的同时,另一个工具从里面读,如何能保证读出来的数据是有顺序的,即:先插入进去的先读出来,根据这个场景们 ...

随机推荐

  1. 垃圾回收你懂,Java垃圾回收你懂吗?

    摘要:在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存.而 Java 不一样,它有垃圾回收器,释放内存由回收器负责.本文接下来将介绍Java垃圾收集的知识原理. java内存区域 Q: J ...

  2. 云小课|MRS基础原理之Oozie任务调度

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Oozie是一个基 ...

  3. GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘

    摘要:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战.华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性 ...

  4. GaussDB (for Cassandra) 数据库治理:大key与热key问题的检测与解决

    摘要:GaussDB(for Cassandra) 提供了大key和热key的实时检测,以帮助业务进行合理的schema设计,规避业务稳定性风险. 本文分享自华为云社区<GaussDB (for ...

  5. socket.d.js v2.3.4 支持"微信"、"uniapp"

    Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议.有用户说,"Socket.D 之于 Socket,尤如 Vu ...

  6. Kubernetes(K8S) helm 安装

    Helm 是一个 Kubernetes 的包管理工具, 就像 Linux 下的包管理器, 如 yum/apt 等, 可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上. Hel ...

  7. AI 黑科技,老照片修复,模糊变高清

    大家好 最近闲逛,发现腾讯开源的老照片修复算法新出了V1.3的预训练模型,手痒试了一下. 我拿"自己"的旧照片试了一下,先看效果 GFPGAN FPGAN算法由腾讯PCG ARC实 ...

  8. 2021InfoComm|钉钉会议 Rooms 的 "全场景" 智能化解决方案

    InfoComm China 是亚太地区规模盛大的专业视听和集成体验解决方案商贸展会,提供前沿革新的产品和一系列高价值的技术展示. 在疫情期间,钉钉音视频支持了全国人民在线办公.在家上课,单日在线会议 ...

  9. POJ - 1611 : The Suspects (普通并查集)

    思路: 模板题,一步一步加入集合,最后判断有多少人跟0在同一个集合就行了. #include<iostream> #include<cstdio> using namespac ...

  10. Linux下安装neo4j

    Linux下安装neo4j 一.JDK安装 参照https://www.cnblogs.com/yclh/p/14849228.html 中jdk1.8的安装 二.下载neo4j 下载地址:https ...