zoukankan      html  css  js  c++  java
  • dataworks中PYODPS2脚本数据库查询结果乱码处理

    # -*- coding: utf-8 -*-
    import datetime
    import sys,time
    import sys
    from odps import options
    import smtplib
    from email.header import Header
    from email.mime.text import MIMEText
    
    # 设置编码(此设置可修复数据库查询结果中文乱码的问题)
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    # 第三方 SMTP 服务
    # SMTP服务器
    mail_host = "smtp.126.com"      
    # 用户名
    mail_user = "123@126.com"    
    # 授权密码,非登录密码
    mail_pass = "123456"         
    # 发件人邮箱(最好写全, 不然会失败)
    sender = '123@126.com'       
    # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    receivers = ['abc@qq.com','bcd@qq.com']   
    # 邮件主题
    title = '邮件标题'  
    # 发送邮件方法
    def sendEmail(content):
        # 内容, 格式, 编码
        message = MIMEText(content, 'plain', 'utf-8')  
        message['From'] = "{}".format(sender)
        message['To'] = ",".join(receivers)
        message['Subject'] = title
        try:
            # 启用SSL发信, 端口一般是465
            smtpObj = smtplib.SMTP_SSL(mail_host, 465)  
            # 登录验证
            smtpObj.login(mail_user, mail_pass)  
            # 发送
            smtpObj.sendmail(sender, receivers, message.as_string())  
            print("mail has been send successfully.")
        except smtplib.SMTPException as e:
            print(e)
    
    # 设置ODPS参数
    options.sql.settings = {'odps.sql.allow.fullscan': 'true'}
    qcc_sql = """
    SELECT DISTINCT * FROM 
    (
        SELECT 
        case WHEN flag1=1 then '正常'
            ELSE concat(db_name,'中文乱码测试') end as result
            FROM 
        (select 
            t2.db_name,t2.code,COUNT(1) as flag1
        from ods_com_t_organization t2 
        where t2.is_company=1 
        and t2.is_deleted=0
        AND nvl(t2.code,'')!=''
        group by t2.db_name,t2.code
        )t1 
    )t3
    WHERE result != '正常'
    ;
    """
    # 查询SQL获取结果
    resdata = []
    with o.execute_sql(qcc_sql).open_reader() as reader:
        resdata = [record.values for record in reader]
    # 判断结果是否有数据,如无则正常,如有则发送邮件并报错退出
    if resdata == []:
        print("数据正常")
    else:
        result = "|".join(resdata[0])
        print(result)
        sendEmail(result)
        sys.exit(-1)
  • 相关阅读:
    Mybatis学习随笔3
    Mybatis学习随笔2
    Mybatis学习随笔
    Java校招面试-什么是线程安全/不安全
    装饰器2
    装饰器
    默认传参的陷阱
    处理日志文件
    第二天
    用户登录
  • 原文地址:https://www.cnblogs.com/chenzechao/p/12501876.html
Copyright © 2011-2022 走看看