用python,调用SQL SERVER 数据向钉钉机器人发送信息

import requests
import time
import datetime
import json
import pyodbc

def send_message():
    # 获取当前时间
    current_time = datetime.datetime.now()
    # 将时间格式化为字符串
    current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")
    # 提取小时和分钟
    current_hour = current_time.hour
    current_minute = current_time.minute
    current_hourstr = str(current_hour)  # 提取小时
    current_minutestr = str(current_minute)  # 提取分钟

    # 钉钉机器人的Webhook地址
    webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=access_token'

    # 用于连接的信息
    server = '#######'
    database = 'sys_db'
    username = 'sa'
    password = '############'

    # 构建连接字符串
    connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password

    # 连接到SQL Server数据库
    connection = pyodbc.connect(connection_string)

    # 创建一个游标对象
    cursor = connection.cursor()

    # 执行SQL查询
    cursor.execute("select * from sys_table")
    # 获取查询结果
    results = cursor.fetchall()
    # 关闭游标和连接
    cursor.close()
    connection.close()

    if results:  # 如果results不为空
        # 初始化一个空字符串来存储"number"字段的值
        mobir_values = []
        #name_to_info = {}

        # 初始化一个空字典来存储名称到手机号码列表的映射
        name_to_mobis = {}

        # 遍历结果集
        for row in results:
            name = row.name
            mobi = row.mobi
            all_numbers = row.number

            # 检查是否已经存在相同名称的键
            if name in name_to_mobis:
                name_to_mobis[name].append((mobi,all_numbers))
            else:
                # 如果不存在,则创建一个新的键,并将手机号码添加到列表中
                name_to_mobis[name] = [(mobi,all_numbers)]

        # 打印结果
        for name, info_list in name_to_mobis.items():
            mobis, numbers = zip(*info_list)
            numbers_str = ' @'.join(numbers)  # 在号码之间添加 "@" 符号
            mobis_str = ' @'.join(mobis)  # 在手机号码之间添加 "@" 符号
            mobir_values.append(mobis)
            # 将对象转换为列表
            phone_numbers_list = list(mobis)
            # 要发送的消息内容
            message = {
                "msgtype": "markdown",
                "markdown": {

                    "title": "@" + numbers_str + "你有审批流程,请及时处理!",
                    "text": "####  @" + mobis_str + "\n > 你有"+name+"审批,请及时处理!\n >  ###### " + current_hourstr + "点" + current_minutestr + "分发布 [点击前往网站](http://baidu.com) \n"
                },
                "at": {
                    "atMobiles": phone_numbers_list,  # @指定的手机号,可以为空列表
                    "isAtAll": False  # 是否@所有人
                }
            }

            # 将消息内容转换为JSON格式
            message_json = json.dumps(message)

            # 发送POST请求
            response = requests.post(webhook_url, headers={"Content-Type": "application/json"}, data=message_json)
            # 检查响应状态码
            if response.status_code == 200:
                print(
                    current_time_str + '---' + "消息发送成功" + '---' + '审批人员:@' + numbers_str + '---' + '审批手机号码:@' + mobis_str + "----" + "流程名称:" +name )
            else:
                print(current_time_str + '---' + "消息发送失败,状态码:",
                      response.status_code + '---' + '审批人员:@' + numbers_str + '---' + '审批手机号码:@' + mobis_str + "----" + "流程名称:" + name)
                print("响应内容:", response.text)


# 定时器循环,每30分钟运行一次脚本
while True:
    # 获取当前时间
    current_time = datetime.datetime.now()
    # 提取小时和分钟
    current_hour = current_time.hour
    current_minute = current_time.minute

    # 获取当前日期
    current_date = datetime.date.today()
    # 获取当前日期的星期几(0 表示星期一,1 表示星期二,以此类推,6 表示星期日)
    day_of_week = current_date.weekday()
    # 判断是否是周日 (星期日,day_of_week 等于 6)
    if day_of_week != 6:
        #在早上8点到晚上20点之间执行操作
        if 8 <= current_hour <= 20:
            send_message()
        #在其他时间段执行操作或什么都不做
        else:
            pass
    else:
        pass
    time.sleep(30 * 60)  # 休眠30分钟(30 * 60秒)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值