python2中下载mysql数据库中的数据,并保存在csv文本中

本项目几个要点:
1.数据库中有中文,且为unicode编码,本项目环境为python2
2.数据库中时间字段为13位的字符型的时间戳,导出时需要改成正常的时间
3.导数需求为每一个小时导前一个小时的日志
4.导出后,涉及到将文件从此服务器转移到另一台服务器上(都是linux环境)
5.涉及到带密码的scp传输文件和python中执行shell命令


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

import MySQLdb as mdb
import codecs
import datetime
import time
import os

log_path='/data/log/sqllog_'

#log_file为日志文件,start_time为日志起始时间,end_time为日志结束时间
def get_start_time():
    dateFormat = "%Y-%m-%d %H:00:00"
    end_time = datetime.datetime.now().strftime(dateFormat)
    log_time = datetime.datetime.now().strftime("%Y%m%d%H")
    timeArray=time.strptime(end_time, "%Y-%m-%d %H:%M:%S")
    end_time=int(time.mktime(timeArray))*1000
    start_time=end_time-3600000
    log_file=log_path+log_time
    return log_file,start_time,end_time



def export_data(log_file,start_time,end_time):
    conn = mdb.connect(
        host = '192.168.1.11',
        user = 'username',
        passwd = 'passwd',
        db = 'dbname',
        port = 3306,
        charset = 'utf8'
    )
    
    cur = conn.cursor(mdb.cursors.DictCursor)
    sql = "select uid,pid,menuid,sid,pt,FROM_UNIXTIME(CONVERT(st/1000,signed),'%Y-%m-%d %T') as stime,FROM_UNIXTIME(CONVERT(et/1000,signed),'%Y-%m-%d %T') as etime from log_info where st>='"+str(start_time)+"' and st<'"+str(end_time)+"';"
    cur.execute(sql)
    rows=cur.fetchall()
    
    with codecs.open(log_file,'w','utf-8') as fh:
        for row in rows:
            fh.write("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s" %(row["uid"],row["pid"],row["menuid"],row["sid"],row["pt"],row["stime"],row["etime"]))
            fh.write("\n")

    cur.close()
    conn.close()

#将文件转移到另一台服务器
def scp_file(log_file):
    cmd='sshpass -p passwd2 scp -P 22 '+ log_file+' root@192.168.1.12:/data/log'
    os.system(cmd)


if __name__=='__main__':
    log_file,start_time,end_time=get_start_time()
    export_data(log_file,start_time,end_time)
    scp_file(log_file)
    print("ok")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值