python3.6导出oracle表数据到excel、压缩、发送邮件

该博客介绍了如何在Redhat6环境下使用Python3.6导出Oracle数据库表数据到Excel,然后进行压缩和通过邮件发送。过程中涉及环境变量配置、Oracle轻量级客户端安装、cron任务设置以及解决在不同邮件客户端中显示问题。
摘要由CSDN通过智能技术生成

运行环境:

redhat6 + python3.6 + crontab + Oracle客户端

用到的python模块:
模块 用到的功能
cx_Oracle 连接Oracle数据库
openpyxl 导出excel
zipfile 压缩文件
smtplib 发送邮件
email 添加邮件附件

操作步骤:

1. 安装python3.6 请参考redhat6安装python3.6.9
2. 安装python模块:用pip安装即可
3. 安装Oracle客户端:可以下载Oracle轻量级客户端,请参考oracle客户端下载
4. 配置环境变量 LD_LIBRARY_PATH=[oracle客户端安装目录]:$LD_LIBRARY_PATH ,NLS_LANG=[oracle数据库NLS_LANGUAGE_NLS_TERRITORY.NLS_CHARACTERSET] ,并添加到 ~/.bash_profile 中
5. 编写代码,代码分为两部分,第一个配置文件,如下:
##数据库相关参数:主机 、数据库用户、数据库密码、数据库sid、数据库字符集nls_lan
ora_host = '192.168.1.100'
ora_user = 'test'
ora_pwd = 'test'
ora_sid = 'test'
##nls_lan = 'AMERICAN_AMERICA.ZHS16GBK'

##数据库共享库目录
##lib_path = '/opt/oracle/instantclient_11_2'

##执行脚本(py,sql)目录
exe_path = '/root/python/prod/test/bin'

##数据库导出sql语句文件,多个文件用逗号隔开;如果sql文件在执行脚本目录下,可以使用相对路径,否则使用绝对路径;
##注意:标点符号都是英文的,sql文件中的时间变量必须是 &date 或 &yyyymmdd
sql_files = '测试脚本1.sql,测试脚本2.sql'

##sql语句中的导数日期 yesterday :表示昨天 ,目前只支持这一种情况,以后可以酌情增加其它日期
exp_date = 'yesterday'

##导出excel目录
excel_path = "/root/python/prod/test/data"

##导出excel文件sheet名,sheet名称与上面参数sql_files中的每个sql文件中sql条数一一对应,如果没有设置对应名称,则sheet名称默认
excel_sheet_names = [['测试脚本1'], ['测试脚本2'], ['测试脚本3']]

##导出exel文件是否压缩 1:压缩 0:不压缩 删除此参数
##is_zip = 1

##压缩后文件名前缀 ,压缩文件名=前缀+导数日期
zipfile_name = '测试脚本'

##是否发送邮件 1: 发送 0:不发送
is_mail = 1
##邮箱发送服务器
mail_server = 'smtp.163.com'

##邮箱发送服务器端口
mail_port = '25'

##发送邮件
mail_from = 'example@163.com'

##发送邮件密码
mail_pass = 'example'

##接收邮件
mail_to = 'xxxxxx@163.com,xxxxxx@qq.com'

##抄送邮件
mail_cc = 'xxxxxxxx@wo.cn,yyyyyy@126.com'

##邮件标题
mail_subject = '测试脚本'

##邮件内容
mail_body = """
<p>您好:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 提取数据见附件,请查收; </p>
<p></p>
<p></p>
<p>-------------------------------------------------------------------------------------</p>
<p> test </p>
<p> test </p>
<p> 系统在使用过程中如遇到问题,请及时与运维团队联系 </p>
<p> 热线电话:11111111111 </p>
<p> 运维邮箱:example@163.com </p>
   """


第二个执行脚本,如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cx_Oracle as cx
from openpyxl import Workbook
import datetime
import os
import zipfile
from config_ora2excel import *   ##导入配置文件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase

##设置环境变量,不知道为什么不生效,程序还是报错:Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or irectory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
#os.environ['LD_LIBRARY_PATH'] = lib_path
#os.environ['NLS_LANG'] = nls_lan

#os.environ.setdefault("LD_LIBRARY_PATH", lib_path)
#os.environ.setdefault("NLS_LANG", nls_lan)

def get_yesterday():
   today = datetime.date.today()
   oneday = datetime.timedelta(days=1)
   yesterday = today - oneday
   return yesterday


def get_data_date():
   # 获取数据日期
   ##data_date = input('请输入数据日期,格式yyyymmdd,默认为昨天:')
   data_date = exp_date
   if data_date.strip().lower() == 'yesterday':
       yesterday = get_yesterday()
       data_date = yesterday.strftime("%Y%m%d")
       ##print(data_date)
   return data_date

def get_weeks():
   #获取周次
   data_date = get_data_date()
   y = int(data_date[:4])
   m = int(data_date[4:6])
   d = int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值