栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python操作Oracle数据库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python操作Oracle数据库

文章目录
  • 前言
  • 一、cx_Oracle是什么?
  • 二、安装步骤
    • 1.安装Oracle Client
    • 2.配置cx_Oracle:
    • 3.配置DLL文件:
  • 二、使用
    • 1.基本用法
    • 2.条件查询
    • 3.导出数据到Excel文件


前言

最近有导出大批量Oracle数据的需求,用PL/SQL查询并导出EXCEL的耗时较长,且占用内存较大。尝试改用Python,提高了效率,节省了内存空间。


一、cx_Oracle是什么?

cx_Oracle 是由甲骨文公司提供支持的开源的Python模块,提供了访问Oracle数据库的API。

https://oracle.github.io/python-cx_Oracle/cx_Oracle官网

二、安装步骤 1.安装Oracle Client

使用cx_Oracle之前要确保本机存在Oracle客户端并正确配置,可以直接去官网下载较新的版本:

配置TNS_ADMIN环境变量:TNS_ADMIN.ora 文件的位置
该文件放置在Oracle Client根目录下

2.配置cx_Oracle:
pip install cx_Oracle -i https://pypi.tuna.tsinghua.edu.cn/simple

该处使用的是临时切换国内镜像源,也可以配置镜像源后再安装。

3.配置DLL文件:

将Oracle Client Instant 目录下 *.dll 拷贝至Python安装根目录下(Python版本要求3.6以上)

二、使用 1.基本用法
import cx_Oracle


def main():
	# 建立连接
	db = cs_Oracle.connect('username', 'password', 'url/servername:port')
	# 获取游标
	cursor = db.cursor()
	# 查询数据
	cursor.execute('SELECt * FROM t_temp')
	# 获取数据
	data = cursor.fetchall()
	print(data)
	# 获取字段名
	title = cursor.description
	print(title)
2.条件查询
def temp(cursor, age, sex):
	# 查询大于一定年龄的某性别老师
	sql = """
	SELECt * FROM teacher WHERe age >= :age AND sex = :sex
	"""
	cursor.execute(str=sql, age=age, sex=sex)
	data = cursor.fetchall()
    title = cursor.description
    result = {
        'title': title,
        'data': data,
    }
    print(result)
3.导出数据到Excel文件

使用openpyxl库将查到的数据转为Excel(.xlsx格式),并试着用自定义的Excel类将生成Excel的步骤封装,这样只要给固定的数据格式,就不用关心Excel的具体生成了。

import logging

from openpyxl import Workbook, load_workbook
from openpyxl.styles import *


class Excel:
    """
    @description : 
    @Author : admin 
    @Time : 2022-04-08 15:37 
    """

    def __init__(self):
    	# 标题A1、B1、...
        self.character_list = [
            'A',
            'B',
            'C',
            'D',
            'E',
            'F',
            'G',
            'H',
            'I',
            'J',
            'K',
            'L',
            'M',
            'N',
            'O',
            'P',
            'Q',
            'R',
            'S',
            'T',
            'U',
            'V',
            'W',
            'X',
            'Y',
            'Z',
        ]
        self.column_list = [
            [item for item in self.character_list],
            ['A' + item for item in self.character_list],
            ['B' + item for item in self.character_list],
        ]

    def run(self, result, full_file_name):
        """
        @description : 
        @Author : admin 
        @Time : 2022-04-08 15:37 
        """
        # 生成表格字段标题
        row = 1
        try:
            wb1 = load_workbook(full_file_name)
            ws1 = wb1['数据']
        except Exception as e:
            logging.warning(e)
            wb1 = Workbook()
            ws1 = wb1['Sheet']
            ws1.title = '数据'
        index = 0
        for item in result['title']:
            i = int(index / 26)
            j = index % 26
            cell_pos = self.column_list[i][j] + str(row)
            ws1[cell_pos] = item[0]
            # 字体
            ws1[cell_pos].font = Font(bold=True)
            # 列宽
            ws1.column_dimensions[self.column_list[i][j]].width = 15
            index += 1
        row += 1
        # 插入数据
        for data_list in result['data']:
            index = 0
            for item in data_list:
                i = int(index / 26)
                j = index % 26
                ws1[self.column_list[i][j] + str(row)] = item
                index += 1
            row += 1
        # 保存数据
        wb1.save(full_file_name)

注: run()中result数据格式为=> “2.条件查询” 中格式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号