python2实现数据库表定时全量同步sftp

python2实现数据库表定时全量同步sftp

需求

周边系统需要通过sftp接口,将本系统数据库的8张表吐给sftp,文件名为txt,提供的字段用#号分隔(逗号存在分隔不开的情况),8张表采用全量每天同步。

环境

操作系统centos7.9
自带的python2.7.5,
python2存在缺少MySqldb、paramiko模块情况,参考上两篇博客进行模块安装

脚本编写

本地环境编写脚本auto_table_up_sftp_v2.py代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import paramiko
from datetime import datetime
import os

# MySQL数据库连接信息
db_host = '192.168.2.206'
db_user = 'root'
db_password = 'ze1bw0,7E[9V'
db_name = 'mysql'
table_list = ['user','db','event',]

#生成的文件列表信息
file_list = []

#创建生成文件的目录
directory = './AuditToPass'
# 检查目录是否存在,如果不存在则创建
if not os.path.exists(directory):
    os.makedirs(directory)

# SFTP连接信息
sftp_host = '192.168.2.139'
sftp_user = 'ynsftp'
sftp_password = '1'
sftp_directory = './'

# 获取当前日期
current_date = datetime.now().strftime('%Y-%m-%d')


# 连接MySQL数据库
conn = MySQLdb.connect(host=db_host, user=db_user, passwd=db_password, db=db_name)
cursor = conn.cursor()

for table_name in table_list:
	# 从MySQL数据库中读取数据
	query = "SELECT * FROM {}".format(table_name)
	cursor.execute(query)
	rows = cursor.fetchall()
	
	# 将数据写入到txt文件
	txt_filename = "{}{}.txt".format(table_name,current_date)
	with open('./AuditToPass/' + txt_filename, 'w') as file:
		for row in rows:
			file.write('#'.join(str(col) for col in row) + '\n')
	print('生成文件{}成功'.format(txt_filename))
	file_list.append(txt_filename)
	print('{}添加到待上传文件列表成功'.format(txt_filename))
# 关闭MySQL连接
cursor.close()
conn.close()

for file_name in file_list:
	# 上传txt文件到SFTP目录
	transport = paramiko.Transport((sftp_host, 22))
	transport.connect(username=sftp_user, password=sftp_password)
	sftp = paramiko.SFTPClient.from_transport(transport)
	sftp.put('./AuditToPass/' + file_name, sftp_directory + file_name)
	print('上传文件{}成功'.format(file_name))

# 关闭SFTP连接
sftp.close()
transport.close()

#清理本地文件
print('开始清理本地的文件列表{}'.format(file_list))
for file_name1 in file_list:
	os.remove('./AuditToPass/' + file_name1)
	print('清理本地文件{}成功'.format(file_name1))

创建定时任务

[root@localhost ~]# crontab -l
10 16 * * * python /root/auto_table_up_sftp/auto_table_up_sftp_v2.py >> /root/auto_table_up_sftp/auto_table_up_sftp.log

实现结果如下
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(python,数据库,python)