python3备份SqlServer存储过程代码,并保存到本地,并发送邮件告知修改记录

# -*- coding:utf-8 -*-

import pymssql
import time
import datetime
import os
from SentEmail import SentMail
# 使用pyinstaller打包的时候,非要导入下面两个,不知道为什么
import _mssql
import decimal


def getModifiedProduce():
    # lastDate记录了上个备份的日期,以此来区分哪些被修改过的存储过程需要备份
    # charset='utf8'不能省,不指定字符集有时候会报错
    with open(r'C:\Users\xxx\backupDate.txt', 'r') as f:
        lastDate = f.read()
    #对多个数据库备份存储过程
    dbInfo = [('192.168.1.31:15323', 'user1', 'password1', 'dbName1'),
              ('192.168.1.31:15323', 'user2', 'password2', 'dbName2')]
    for info in dbInfo:
        print(info)
        host, user, password, database = info
        conn = pymssql.connect(host=host, user=user, password=password,
                               database=database, charset='utf8')
        # print(host, user, password, database)
        cur = conn.cursor()
        # 备份当天被修改的存储过程只能等第二天备份,所以这里要加=号
        cur.execute(
            'select name,convert(varchar(30),modify_date,112) '
            'from sys.procedures WHERE CONVERT(VARCHAR(30),modify_date,23)>=CONVERT(VARCHAR(30),\'' + lastDate + '\',23)')
        pName = cur.fetchall()
        print(pName)
        # 邮件正文
        msg = '存储过程修改记录如下:\n'
        # 获取昨天的日期
        # date = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
        for name in pName:
            cur.execute('sp_helptext ' + name[0])
            pCotent = cur.fetchall()
            dir = r'\\tsclient' + r'\D\SVN_NEW\OnlineSqlBackup\\' + database + r'\\' + name[0] + r'.sql\\' + name[
                0] + r'.sql_' + name[1]
            msg = msg + name[0] + '\n'
            if not os.path.exists(dir):
                print(dir)
                for i in pCotent:
                    with open(dir, 'a') as f:
                        f.write(i[0].replace('\r', ''))
        if pName:
            to_list = ['mailName1', 'mailName2']
            sentMail = SentMail('sender', to_list, 'password')
            sentMail.sent('smtpServerName', msg)
        date = time.strftime("%Y%m%d")
        with open(r'C:\Users\xxx\backupDate.txt', 'w') as f:
            f.write(date)
        conn.close()


getModifiedProduce()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值