import pymysql from datetime import datetime, timedelta import time class Mydb(): def __init__(self,host,user,passwd,db): self.con=pymysql.connect(host,user,passwd,db) self.cursor=self.con.cursor() def get_cur_date(self): date = datetime.today() curdate = date.strftime('%Y-%m-%d') return curdate def close(self): self.cursor.close() self.con.close() def get_pren_date(self, n=1): predate = datetime.today() + timedelta(-n) predate = predate.strftime('%Y-%m-%d') return predate def curConfirm_top5_proince(self): curTime=self.get_cur_date() sql='''select relativeTime,curConfirm,area from insideProvince where relativeTime like "%s" order by curConfirm desc limit 5'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select relativeTime,curConfirm,area from insideProvince where relativeTime like "%s" order by curConfirm desc limit 5'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results def inside_conRelativeAndComein(self): sql=""" select sum(confirmedRelative),relativeTime from insideprovince group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) result1=[] result1=self.cursor.fetchall() sql=""" select sum(confirmedRelative),relativeTime from insidecity where city="境外输入" group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) result2=[] result2=self.cursor.fetchall() result=[] for i in result1: for j in result2: if i[1]==j[1]: result.append((int(i[0]),int(j[0]),i[1])) break return tuple(result) def Confirm_proince(self): curTime=self.get_cur_date() sql='''select relativeTime,confirmedRelative,area from insideProvince where relativeTime like "%s" and confirmedRelative !=0'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select relativeTime,confirmedRelative,area from insideProvince where relativeTime like "%s" and confirmedRelative !=0'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results def American_confirmrelative(self): sql='''select relativeTime,confirmedRelative from outsidecountry where area="美国"''' results=[] self.cursor.execute(sql) results = self.cursor.fetchall() return results def confirmRelative_top10_country(self): curTime=self.get_cur_date() sql='''select relativeTime,confirmedrelative,area from outsideCountry where relativeTime like "%s" order by confirmedrelative desc limit 10'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select relativeTime,confirmedrelative,area from outsideCountry where relativeTime like "%s" order by confirmedrelative desc limit 10'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results def insideAndoutside_ConfirmRelative(self): sqlout='''select sum(confirmedRelative),relativeTime,'outside' as local from outsidecountry group by relativeTime order by relativeTime asc''' result=[] self.cursor.execute(sqlout) resultou = self.cursor.fetchall() sqlin='''select sum(confirmedRelative),left(relativeTime,10),'inside' as local from insideprovince group by relativeTime order by relativeTime asc''' self.cursor.execute(sqlin) resultin=self.cursor.fetchall() result=[] for o in resultou: for i in resultin: if o[1]==i[1]: result.append((o[1],int(o[0]),int(i[0]))) break return tuple(result) def outside_confirmedAndcurfirmed(self): sql="""select sum(confirmed),sum(curConfirm) ,relativeTime from outsidecountry group by relativeTime order by relativeTime asc""" self.cursor.execute(sql) resultsql=[] resultsql=self.cursor.fetchall() result=[] for r in resultsql: result.append((int(r[0]),int(r[1]),r[2])) return tuple(result) def outside_diedAndcrued(self): sql="""select sum(died),sum(crued) ,relativeTime from outsidecountry group by relativeTime order by relativeTime asc""" self.cursor.execute(sql) resultsql=[] resultsql=self.cursor.fetchall() result=[] for r in resultsql: result.append((int(r[0]),int(r[1]),r[2])) return tuple(result) def chinaCurconfirmed(self): curTime=self.get_cur_date() sql='''select relativeTime,curConfirm,area from insideProvince where relativeTime like "%s"'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select relativeTime,curConfirm,area from insideProvince where relativeTime like "%s"'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results def chinaConfirmed(self): curTime=self.get_cur_date() sql='''select relativeTime,confirmed,area from insideProvince where relativeTime like "%s"'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select relativeTime,confirmed,area from insideProvince where relativeTime like "%s"'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results def outsideSummary(self): sql="select * from outsideSummary" self.cursor.execute(sql) result=[] result=self.cursor.fetchall() ans=[] for r in result[0]: ans.append(r) return tuple(ans) def inside_curConAndConfirmed(self): sql=""" SELECT sum(confirmed),sum(curConfirm),relativeTime from insideprovince group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) result=[] result=self.cursor.fetchall() ans=[] for r in result: ans.append((int(r[0]),int(r[1]),r[2])) return tuple(ans) def inside_cruedAnddied(self): sql=""" SELECT sum(crued),sum(died),relativeTime from insideprovince group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) result=[] result=self.cursor.fetchall() ans=[] for r in result: ans.append((int(r[0]),int(r[1]),r[2])) return tuple(ans) def inside_cruedAnddieRate(self): sql=""" SELECT sum(crued),sum(died),relativeTime from insideprovince group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) result=[] result=self.cursor.fetchall() sql=""" SELECT sum(confirmed),relativeTime from insideprovince group by relativeTime order by relativeTime asc """ self.cursor.execute(sql) conf=self.cursor.fetchall() ans=[] for i in result: for j in conf: if i[2]==j[1]: c=int(j[0]) ans.append((float(i[0]/c),float(i[1]/c),i[2])) break return tuple(ans) def get_overseas_data(self): curTime=self.get_cur_date() sql='''select province,relativeTime,confirmed FROM insidecity where city='境外输入' and relativeTime like "%s" order by confirmed desc limit 10'''%(curTime+"%") results=[] try: self.cursor.execute(sql) results = self.cursor.fetchall() cout=1 while(len(results)<=0): curTime=self.get_pren_date(cout) sql='''select province,relativeTime,confirmed FROM insidecity where city='境外输入' and relativeTime like "%s" order by confirmed desc limit 10'''%(curTime+"%") self.cursor.execute(sql) results = self.cursor.fetchall() cout += 1 if cout >= 30: break else: time.sleep(1) except Exception as e: print(e) return results class OutsideSummaryClass: def __init__(self, host, user, passwd, db): # 构造函数,连接数据库,建立cursor self.connection = pymysql.connect(host, user, passwd, db) self.cursor = self.connection.cursor() def data_result(self): sql = "select * from outsidesummary order by time DESC" self.cursor.execute(sql) result = self.cursor.fetchone() return result def data_7days(self): sql = "select sum(curConfirm),relativetime from outsidecountry group by relativetime order by relativetime asc" count = self.cursor.execute(sql) if count>7: results = self.cursor.fetchmany(7) else: results = self.cursor.fetchall() ans = [] for i in results : ans.append((int (i[0]),i[1])) return ans class TopOverseasInputClass: def __init__(self, host, user, passwd, db): self.conn = pymysql.connect(host, user, passwd, db) self.cursor = self.conn.cursor() def get_overseas_data(self): sql = "select * from topOverseasInput order by value DESC" self.cursor.execute(sql) results = self.cursor.fetchall() return results class InsideProvinceClass: def __init__(self, host, user, passwd, db): self.conn = pymysql.connect(host, user, passwd, db) self.cursor = self.conn.cursor() def __del__(self): self.conn.close() # 获取当天日期 def get_cur_date(self): date = datetime.today() curdate = date.strftime('%Y-%m-%d') return curdate # 获取前N天的日期 def get_pren_date(self, n=1): predate = datetime.today() + timedelta(-n) predate = predate.strftime('%Y-%m-%d') return predate #获取某数据最多的n个省 def get_data(self,dataType,num): curdate = self.get_cur_date() # 获取当天的日期 sql = "select area,%s,relativeTime from insideprovince where relativeTime like '%s' %s order by %s desc limit %d" \ % (dataType,(curdate + '%'),("AND AREA NOT IN ('香港','澳门','台湾')" if dataType=="confirmedrelative" else ""),dataType,num) results = [] try: self.cursor.execute(sql) results = self.cursor.fetchall() n = 1 while len(results) <= 0: predate = self.get_pren_date(n) sql = "select area,%s,relativeTime from insideprovince where relativeTime like '%s' %s order by %s desc limit %d" \ % (dataType,(predate + '%'),("AND AREA NOT IN ('香港','澳门','台湾')" if dataType=="confirmedrelative" else ""),dataType,num) self.cursor.execute(sql) results = self.cursor.fetchall() n += 1 if n >= 30: break else: time.sleep(1) except Exception as e: print(e) return results class InsideSummaryClass: def __init__(self, host, user, passwd, db): self.conn = pymysql.connect(host, user, passwd, db) self.cursor = self.conn.cursor() def get_input_data(self,dataType): sql = "select %s,InsertTime from insidesummary order by maplastupdatedtime ASC"%dataType self.cursor.execute(sql) results = self.cursor.fetchall() return results if __name__=='__main__': db = Mydb('localhost','root','123456','cov2019_data') result = db.get_overseas_data() print(result)