其实就是利用网上的sendmail代码与cx_Oracle模块的查询数据库功能,做了个简单的数据库OGG与正式数据库的某表数量条数是否一致的判断,并将结果发送到邮箱。最后将该程序打包成EXE,通过windows系统的自动任务,设置成每日定时执行。
这里最关键的不是代码的编写,而是cx_Oracle数据库环境的搭建以及安全的发送邮件主机。
import cx_Oracle
from sqlalchemy import create_engine
import pandas as pd
import smtplib
from email.mime.text import MIMEText
def sendmail_ly(jieguo):
mailserver = "smtp.sina.com" # 邮箱服务器地址
username_send = ' # 邮箱用户名
password = '' # 邮箱密码:需要使用授权码
username_recv = '' # 收件人,多个收件人用逗号隔开
mail = MIMEText(jieguo)
mail['Subject'] = 'OGG数据库对比结果'
mail['From'] = username_send # 发件人
mail['To'] = username_recv # 收件人;[]里的三个是固定写法,别问为什么,我只是代码的搬运工
smtp = smtplib.SMTP(mailserver, port=25) # 连接邮箱服务器,smtp的端口号是25
# smtp=smtplib.SMTP_SSL('smtp.qq.com',port=465) #QQ邮箱的服务器和端口号
smtp.login(username_send, password) # 登录邮箱
smtp.sendmail(username_send, username_recv, mail.as_string()) # 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
smtp.quit() # 发送完毕后退出smtp
print('success')
if __name__ == '__main__':
#连接数据库1,下面括号里内容根据自己实际情况填写
conn1 = cx_Oracle.connect('')
#print("successfully connected to oracle database")
# 使用cursor()方法获取操作游标
cursor1 = conn1.cursor()
# 执行sql 语句
sql1='select count'
# 查询oracle数据库
df1 = pd.read_sql(sql1,conn1)
data1=df1.iloc[0,0]
# df2 = pd.read_sql(sql1,orengine2)
print('连接正式数据库数据成功,获取到的数据条数为:' )
print(data1)
cursor1.close() # 记得关cursor和db
conn1.close()
# 连接数据库2,下面括号里内容根据自己实际情况填写
conn2 = cx_Oracle.connect('')
#print("successfully connected to oracle database")
# 使用cursor()方法获取操作游标
cursor2 = conn2.cursor()
# 执行sql 语句
sql2 = 'select count'
# 查询oracle数据库
df2 = pd.read_sql(sql2, conn2)
data2 = df1.iloc[0, 0]
# df2 = pd.read_sql(sql1,orengine2)
print('连接OGG数据库数据成功,获取到的数据条数为:')
print(data2)
cursor2.close() # 记得关cursor和db
conn2.close()
if (data1 == data2) :
print('OGG与正式数据库的某表条数一致')
sendmail_ly('一致的数量。OGG与正式数据库的数量一致。正式数据库的数量与OGG数据库的数量为%d '%(data1))
else:
print('OGG与正式数据库的某表条数不一致')
sendmail_ly('不一致的数量。OGG与正式数据库的数量不一致。正式数据库的数量为%d '%(data1)+'OGG数据库的数量为%d '%(data2))
print('按任意键退出')