前面日志我们完成了每日告警数据存储到数据库中,然后记录下完成存储的告警日期。本次开始我们从数据库取出告警数据然后进行分析并画图展示,共分三篇,如下图:
今天是第一篇,从数据库中读出特定日期的告警并存储在CSV文件中:
- 主要包括两个函数,一个是读数据库的read_db,另一个是写csv文件的write_csv;
- 思路就是用sql的select语句按照日期取出要分析的告警,放入一个rows,然后调用wirte_csv,循环rows,将每一个row按行写入csv文件即可。
代码很短,注释也比较清晰,欢迎大拿指正,共同进步。
# -*- encoding=UTF-8 -*-
__author__ = 'wjj1982'
__date__ = '2019/8/27 13:27'
__product__ = 'PyCharm'
__filename__ = '从数据库中读出特定日期的告警'
import sqlite3
import csv
def write_csv(filename, rows):
# filename是最终存储的csv文件
wf = open(filename, 'w', newline='')
writer = csv.writer(wf)
header = ('告警日期', '网元北向标识', '网元', '告警码名称', '发生时间', '告警原因', '位置')
writer.writerows([header])
for row in rows:
writer.writerows([row])
def read_db(db_name, db_table_name):
# 连接数据库
conn = sqlite3.connect(db_name)
# 游标对象
cursor = conn.cursor()
# # 查询数据库中表里的所有数据,取8月5日的告警
# cursor = conn.cursor("SELECT * from {} WHERE 告警日期='2019-08-05'".format(db_table_name))
# 查询数据库中表里的所有数据,取8月5日到8月7日的告警
cursor = cursor.execute("SELECT * from {} WHERE 告警日期 between '2019-08-26' and '2019-09-07'".format(db_table_name))
# 通过游标执行数据库查找命令,并查找所有符合条件的行
rows = cursor.fetchall()
# 最后关闭游标关闭数据库连接
cursor.close()
conn.close()
return rows
def main():
"""将数据库中特定时间的行取出并写入csv文件"""
# 定义变量
db_name = 'E:\python\python-code\数据库操作\每日当前告警写入数据库\current_FM_chengdian.db'
db_table_name = 'FMTable'
filename = '数据存储表0909.csv'
# 读取数据库
rows = read_db(db_name, db_table_name)
# 存储数据到csv文件中
write_csv(filename, rows)
if __name__ == '__main__':
main()
结果如下图: