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

python,处理,oracle,数据库,学习,过程 · 浏览次数 : 43

小编点评

## Python 处理 Oracle 数据库的学习指南 **环境安装:** 1. 下载并安装 Python 3.11 版本:`pip install python3.11.3` 2. 下载并安装 PyCharm 版本:`pip install pycharm` 3. 设置 PyCharm 项目设置: * 项目名称:zhaobs * 编码:utf-8 * 项目目录:项目根目录 **数据加载:** 1. 创建两个文本文件:`zhaobsh.ini` 和 `zhaobs.sql` 2. 在 `zhaobsh.ini` 中配置 Oracle 数据库信息,例如: * `jdbcString`:连接字符串 * `driverPath`:驱动器路径 * `urlString`:数据库地址 * `userName`:用户名 * `passWord`:密码 3. 在 `zhaobs.sql` 中编写 SQL 语句进行数据加载 **数据库连接和操作:** 1. 使用 JayDeB API 连接数据库:`jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath)` 2. 创建游标,执行 SQL 语句:`cur.execute(getdatasql)` 3. 获取结果集:`tabledata = cur.fetchall()` 4. 将结果集写入文件:`fname.write(str(datetime.datetime.now()))` **示例代码:** ```python 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') # 连接数据库 conn = jaydebeapi.connect(jdbcString,urlString,[userName,passWord],driverPath) # 获取数据表信息 getdatasql = "select table_name,column_name from zhaobsh001 where TABLE_NAME not in (select table_name from zhaobsh002) ;" cur.execute(getdatasql) tabledata = cur.fetchall() # 写数据到文件 fname.write(str(datetime.datetime.now())) for tableinfo in tabledata : print(tableinfo[0] + " " + tableinfo[1]) # 关闭连接 conn.close() ``` **注意:** * `zhaobsh.ini` 示例配置文件中仅展示了基本配置,实际中可能需要根据具体情况进行调整。 * 示例代码展示了数据加载和输出到文件,您可以根据需要进行修改。 * 需要根据您的数据库信息修改连接字符串、驱动器路径和 SQL 语句。

正文

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数据库的学习过程相似的内容:

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

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

Oracle AWR学习之二-利用ChatGPT编写一键获取AWR报告的脚本

# Oracle AWR学习之二-ChatGPT提升效率之n ## 背景 ``` 之前生成awr报告比较麻烦, 想着能够一键生成. 再辅以部分shell或者是python处理就可以进行细致的分析. 这一块其实还是比较简单的, 在ChatGPT加持下的确能够极大的提高自己的工作效率. 但是怀疑国内的学

[转帖]python读取配置文件获取所有键值对_python总结——处理配置文件(ConfigParser)

python处理ConfigParser 使用ConfigParser模块读写ini文件 (转载) ConfigParserPython 的ConfigParser Module中定义了3个类对INI文件进行操作。分别是RawConfigParser、ConfigParser、 SafeConfig

Python处理CSV文件

python处理CSV文件 CSV文件 CSV (comma-separated values)文件是一种文本文件格式,允许以表格结构保存数据。这是一种流行的格式,用于从数据库和电子表格导出和导入数据,CSV 文件中的每条数据都用逗号 (,) 分隔,例如,第一行数据可以选择用作标题,标明其下方的每一

Python 潮流周刊#52:Python 处理 Excel 的资源

本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 本期周刊分享了 12 篇文章,12 个开源项目,赠书 5 本《网络是怎样连接的》,

< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践

欢迎来到系列第八篇,异常处理的深入探讨。本文将分五部分展开。首先,我们将学习Python异常处理的基础知识,理解`try/except`语句的用法。然后,我们将了解Python的常见异常类型并通过实例理解它们的作用。第三部分,我们将更深入地解析`try-except`块,理解其工作原理及更加复杂的用法。在第四部分,我们会介绍如何自定义异常,并讨论其应用场景。最后,我们将介绍上下文管理器在异常处理中

[转帖]Python基础之文件处理(二)

https://www.jianshu.com/p/7dd08066f499 Python基础文件处理 python系列文档都是基于python3 一、字符编码 在python2默认编码是ASCII, python3里默认是utf-8; unicode分为 utf-32(占4个字节),utf-16(

实践探讨Python如何进行异常处理与日志记录

本文分享自华为云社区《Python异常处理与日志记录构建稳健可靠的应用》,作者:柠檬味拥抱。 异常处理和日志记录是编写可靠且易于维护的软件应用程序中至关重要的组成部分。Python提供了强大的异常处理机制和灵活的日志记录功能,使开发人员能够更轻松地管理代码中的错误和跟踪应用程序的执行过程。在本文中,

【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误

问题描述 使用VS Code创建Python Function,处理Event Hub中的数据。当部署到Azure Function App后,函数无法执行,查看 Function 日志出现 Value cannot be null. (Parameter 'receiverConnectionSt

Python学习之五_字符串处理生成查询SQL

Python学习之五_字符串处理生成查询SQL 前言 昨天想给同事讲解一下获取查询部分表核心列信息的SQL方法 也写好了一个简单文档. 但是感觉不是很优雅. 最近两三天晚上一直在学习Python. 想将昨天的文档处理成一个工具的方式. 将查询SQL展示出来. 然后再由同事手工检查确认. 增加时间范围