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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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)