You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
5.0 KiB

5 years ago
# encoding: utf-8
import pymysql
import time
from app.utils import get_cur_date, get_pre_n_date
class MyDB:
def __init__(self, host, user, passwd, db):
self.conn = pymysql.connect(host, user, passwd, db)
self.cursor = self.conn.cursor()
def __del__(self):
if self.conn is not None:
self.conn.close()
# 测试:获取当前数据库中的所有表
def test_query_tables(self):
# sql = 'show tables'
sql = "select * from province_daily_datas where pub_time like '2020.08.03%'"
self.cursor.execute(sql)
results = self.cursor.fetchall()
return results
# 获取最近一日的数据
# table: 查指定表
# timeHeader: 该表中时间字段
def fetch_datas(self, table='', timeHeader='pub_time'):
curdatestr = get_cur_date()
sql = "select * from %s where %s like '%s'" % (table, timeHeader, curdatestr + '%')
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
# 如果当天没有取到数据,则尝试取前一天的数据,直到取到数据为止
n = 1
targetdate = curdatestr
while len(results) <= 0:
predatestr = get_pre_n_date(n)
sql = "select * from %s where %s like '%s'" % (table, timeHeader, predatestr + '%')
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
n += 1
if len(results) > 0:
targetdate = predatestr
else:
time.sleep(2) # 休眠2s
if n >= 100:
print('+++ [mydb] 最近三个月都没有数据')
return tuple()
print('+++ [mydb] 获取到%s的数据,数量:%d' % (targetdate, len(results)))
return results
# 获取省份数据top5
def province_curConfirm_top_n(self, limit=5):
curdatestr = get_cur_date()
sql = 'select curConfirm,area,pub_date from province_daily_datas where pub_date like "%s" order by curConfirm desc limit %s' % (curdatestr+'%', limit)
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
n = 1
targetdate = curdatestr
while len(results) <= 0:
predatestr = get_pre_n_date(n)
sql = 'select curConfirm,area,pub_date from province_daily_datas where pub_date like "%s" order by curConfirm desc limit %s' % (predatestr+'%', limit)
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
n += 1
if len(results) > 0:
targetdate = predatestr
else:
time.sleep(2) # 休眠2s
if n >= 100:
print('+++ [mydb] 最近三个月都没有数据')
return tuple()
print('+++ [mydb] 获取到%s的数据,数量:%d' % (targetdate, len(results)))
return results
# 根据条件字典生成字符串
# def generate_condition_text(self, condition_dict, flag='%'):
# text = ''
# for i in range(len(condition_dict)):
# text += key + flag + condition_dict[key]
# 统计境外输入病例总数以及现有境外输入病例数前20个省份柱状图
def province_import_top_n(self, limit=20):
curdatestr = get_cur_date()
sql = 'select province,confirmed,curConfirm,pub_date from city_daily_datas where city like "%s" and pub_date like "%s" order by confirmed desc limit %s' % ('境外输入%', curdatestr+'%', limit)
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
n = 1
targetdate = curdatestr
while len(results) <= 0:
predatestr = get_pre_n_date(n)
sql = 'select province,confirmed,curConfirm,pub_date from city_daily_datas where city like "%s" and pub_date like "%s" order by confirmed desc limit %s' % ('境外输入%', predatestr+'%', limit)
print('+++ [mydb] execute "%s"' % sql)
self.cursor.execute(sql)
results = self.cursor.fetchall()
n += 1
if len(results) > 0:
targetdate = predatestr
else:
time.sleep(2) # 休眠2s
if n >= 100:
print('+++ [mydb] 最近三个月都没有数据')
return tuple()
print('+++ [mydb] 获取到%s的数据,数量:%d' % (targetdate, len(results)))
return results
# 获取昨日新增确诊病例数前5的城市
# 指定城市最近n日新增确诊数趋势
# 现有确诊数量前10个城市的昨日新增确诊和新增出院人数柱状图
if __name__ == '__main__':
mydb = MyDB('localhost', 'root', '123456', 'conv19_datas')
results = mydb.fetch_datas('province_daily_datas')
print(type(results))
print(len(results))
print(results)