Python将日志写入MySQL数据库

今天开发需求:把某个日志里面的内容写入数据库存储,方便调阅。

日志类型,每天会生成一个,里面有6个字段:

第一个字段是时间,但是只有时分秒(xx:xx:xx)

第二个字段和第三个字段还有第五个字段只是个简单的数字id

第四个字段是名称

第六个字段是注释,写的比较多字段较长

日志每个字段有 | 符号隔开

接到需求后,首先决定用Python的split()函数做每列的切割

lists=line.split('|')

每个字段直接用lists[0] , lists[1] lists[2]  就可以取出来了

然后使用pymysql模块连接数据库执行语句,首先是根据每个字段创建数据库

create table gtalog (time   DATETIME,
          id1  int,
          id2  int,
          names char(20),
          id3  int,
          remarks  char(200));

创建好数据库之后开始读取日志

with open(logs, "r", encoding="utf-8") as f: ###打开日志文件
       lines = f.readlines()                             ###把日志里面分列提取

       for  line  in  lines:

            log=line.split('|')   ###把提取出来的单列,用分隔符分开

            date2 = datetime.datetime.now().date() ###获取数据库DATETIME时间的年月日 xxxx-xx-xx

            log0=("%s %s" % (date2, log[0]))###因为数据库第一列是DATETIME类型,我们提取日志的第一列只有时分秒,所以拼接年月日

            print(log0, log[1], log[1], log[1], log[1], log[1],)   ###分别输出每个字段

现在每个字段都能提取出来,下一步只要连接数据库,用sql语句把字段写入数据库就完成了。

connent = pymysql.connect(host='10.10.10.10', user='root', passwd='123456', db='logs', port=3306, charset='utf8') ##连接数据库

cursor = connent.cursor() ###创建游标

sql="insert into gtalog(time,id1,id2,names,id3,remarks) values"   ###需要执行执行的sql语句

sql += " ('%s', %s, %s, '%s', %s, '%s');" % (log0,log[1],log[2],log[3],log[4],log[5]) ###拼接sql语句,因为有的字段插入的时候需要单引号,不然sql语句会报错

cursor.execute(sql)###执行sql语句

connent.commit() ###提交事务,写入数据库

到这里整个流程就完成了,下面是完整的Python脚本:

import datetime
import pymysql
import time


date1 = time.strftime('%Y%m%d')
logs = ("/home/log/%s.log" % (date1))
date2 = datetime.datetime.now().date() ###获取数据库DATETIME时间的年月日 xxxx-xx-xx

def log_w(): #读取日志文件中,清洗的表名
    with open(logs, "r", encoding="utf-8") as f: 
        lines = f.readlines()
        connent = pymysql.connect(host='10.10.10.10', user='root', passwd='123456', db='logs', port=3306, charset='utf8')  
        cursor = connent.cursor()
        for line in lines:
            aaa=line.split('|')
            log0=("%s %s" % (date2, log[0]))
            sql="insert into gtalog(time,id1,id2,names,id3,remarks) values"
            sql += " ('%s', %s, %s, '%s', %s, '%s');" % (log0,log[1],log[2],log[3],log[4],log[5])  
            cursor.execute(sql)
        connent.commit()  

if __name__ == '__main__':
    log_w()
这个脚本写的比较简单,很多地方还可以继续完善,大家可以根据自己的需求进行修改
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值