首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从数据库获取数据并绘图

前天晚上十点, 给徒弟道晚安的时候, 发现她还在忙工作的事情,这么晚了都这么累了,还不让睡,很是心疼。

知道缘由之后,我想我可以做点什么

处理流程

1 连接数据库

2 执行sql

3 定时执行并写入数据到excel

4 绘制折线图

首先 连接数据库

#!/usr/bin/env python

#coding=utf-8

importpymysql

defmysql(host='192.168.1.58',

port=3306,

user='root',

passwd='112358',

db='mirror',

charset='utf8'):

conn=pymysql.connect(host=host,

port=port,

user=user,

passwd=passwd,

db=db,

charset=charset)

‍cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

try:

yieldcursor

finally:

conn.commit()

cursor.close()

conn.close()‍

定义一个函数 执行sql并获取结果的条数

#执行sql

defexec_sql():

withmysql()ascursor:

#1上一天未结算订单统计

row_count1=cursor.execute(sql)

c_time=time.strftime("%H:%M",time.localtime())

m_x.append(c_time)

m_y.append(row_count1)

print('\n'.format(x轴=m_x,y轴=m_y))

定时一个函数 执行定时任务并写入excel

#设定定时每隔多长时间执行一次sql

defcron_exec():

foriinrange(,s):

exec_sql()

temp=[u'x轴的值','y轴的值']#设置表头

forpos,vinenumerate(temp):

table.write(,pos,v)#表头

table.write(i+1,,m_x[i])#第一列的值

table.write(i+1,1,m_y[i])#第二列的值

time.sleep(interval_time)#休眠60秒

file.save('lly.xls')#写入excel

绘制折线图

defmake_figure():

x=m_x# x轴的数据

y=m_y# y轴的数据

plt.figure()#创建绘图对象

plt.plot(x,y)#在当前绘图对象进行绘图

plt.xlabel("时间(s)")#X轴标签

plt.ylabel("数值(m)")#Y轴标签

plt.title("一个简单的折线图")#标题

plt.savefig("llb.png")#保存图象

启动脚本

if__name__=='__main__':

cron_exec()#执行定时任务,写入x,y轴对应数据,存入excel

make_figure()#绘图

好啦!完成了(因为是测试,时间间隔短,y轴的值没有变化,所以是水平线)

excel里则是类似这样的

完整脚本代码

#!/usr/bin/env python

#coding=utf-8

import matplotlib.pyplot as plt

from pylab import mpl

import pymysql

import contextlib

import time

import xdrlib,sys

import xlwt

file = xlwt.Workbook() # 新建一个Excel

# 新建一个sheet

table = file.add_sheet('info', cell_overwrite_ok=True)

m_x = [] # 初始化x轴的值

m_y = [] # 初始化y轴的值

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体

# 解决保存图像是负号'-'显示为方块的问题

mpl.rcParams['axes.unicode_minus'] = False

# 待执行的sql语句

sql = "select name from company;"

# 定时时间间隔 单位:秒

interval_time = 10

# 执行次数

s = 3

# 定义上下文管理器,连接后自动关闭连接

@contextlib.contextmanager

def mysql(host='192.168.1.58',

port=3306,

user='root',

passwd='112358',

db='mirror',

charset='utf8'):

conn = pymysql.connect(host=host,

port=port,

user=user,

passwd=passwd,

db=db,

charset=charset)

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

try:

yield cursor

finally:

conn.commit()

cursor.close()

conn.close()

# 执行sql

def exec_sql():

with mysql() as cursor:

#1 上一天未结算订单统计

row_count1 = cursor.execute(sql)

c_time = time.strftime("%H:%M",time.localtime())

m_x.append(c_time)

m_y.append(row_count1)

print('\n'.format(x轴=m_x, y轴=m_y))

# 设定定时每隔多长时间执行一次sql

def cron_exec():

for i in range(0, s):

exec_sql()

temp = [u'x轴的值', 'y轴的值'] # 设置表头

for pos, v in enumerate(temp):

table.write(0, pos, v) # 表头

table.write(i+1, 0, m_x[i]) # 第一列的值

table.write(i+1, 1, m_y[i]) # 第二列的值

time.sleep(interval_time) # 休眠60秒

file.save('lly.xls') # 写入excel

def make_figure():

x = m_x # x轴的数据

y = m_y # y轴的数据

plt.figure() #创建绘图对象

plt.plot(x,y) #在当前绘图对象进行绘图

plt.xlabel("时间(s)") #X轴标签

plt.ylabel("数值(m)") #Y轴标签

plt.title("一个简单的折线图") #标题

plt.savefig("llb.png") #保存图象

if __name__ == '__main__':

cron_exec() # 执行定时任务,写入x,y轴对应数据, 存入excel

make_figure() # 绘图

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180414G0ZCT500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券