|
@@ -4,24 +4,24 @@ from sqlalchemy import create_engine
|
|
|
import datetime
|
|
|
import pdb
|
|
|
|
|
|
-
|
|
|
-engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % ('root', 'pengmin', 'localhost', 'qixiangdb'))
|
|
|
-
|
|
|
-conn_qx = pymysql.connect(
|
|
|
- host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com',
|
|
|
- user='qx_cas',
|
|
|
- password='Qx@123456',
|
|
|
- database='qx_cas',
|
|
|
- charset='utf8'
|
|
|
- )
|
|
|
-
|
|
|
-conn_local = pymysql.connect(
|
|
|
- host='localhost',
|
|
|
- user='root',
|
|
|
- password='pengmin',
|
|
|
- database='qixiangdb',
|
|
|
- charset='utf8'
|
|
|
- )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
def getNextSoc(start_soc):
|
|
@@ -133,7 +133,7 @@ def snDayDfPreProcess(sn_day_df):
|
|
|
|
|
|
|
|
|
|
|
|
-def updtAllSnFct(start_date,end_date):
|
|
|
+def updtAllSnFct(start_date,end_date, db_engine, db_local, db_qx, sn_table_name='tb_sn_factor'):
|
|
|
'''计算开始时间到结束时间的,所有sn的factor'''
|
|
|
start_date_datetime=datetime.datetime.strptime(start_date,'%Y-%m-%d')
|
|
|
end_date_datetime=datetime.datetime.strptime(end_date,'%Y-%m-%d')
|
|
@@ -141,25 +141,26 @@ def updtAllSnFct(start_date,end_date):
|
|
|
i=1
|
|
|
while i<=delta_day:
|
|
|
end_date=(start_date_datetime+datetime.timedelta(days=i)).strftime("%Y-%m-%d")
|
|
|
- updtAllSnTodayFct(start_date,end_date)
|
|
|
+ updtAllSnTodayFct(start_date,end_date, db_engine, db_local, db_qx, sn_table_name)
|
|
|
|
|
|
start_date=end_date
|
|
|
i+=1
|
|
|
+
|
|
|
|
|
|
-def updtAllSnTodayFct(start_date,end_date):
|
|
|
+def updtAllSnTodayFct(start_date,end_date, db_engine, db_local, db_qx, sn_table_name):
|
|
|
''''更新今天所有sn的factorx信息,start_date和end_date相隔一天。此处还可优化'''
|
|
|
- conn_local = pymysql.connect(
|
|
|
- host='localhost',
|
|
|
- user='root',
|
|
|
- password='pengmin',
|
|
|
- database='qixiangdb',
|
|
|
- charset='utf8'
|
|
|
- )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
start_date_str="'"+start_date+"'"
|
|
|
end_date_str="'"+end_date+"'"
|
|
|
sql_cmd="select * from drive_info where time between "+start_date_str+" and "+end_date_str+" and distance!=0;"
|
|
|
- range_soc_df = pd.read_sql(sql_cmd, conn_qx)
|
|
|
+ range_soc_df = pd.read_sql(sql_cmd, db_qx)
|
|
|
|
|
|
|
|
|
today_sn_list=range_soc_df['name'].unique().tolist()
|
|
@@ -170,15 +171,15 @@ def updtAllSnTodayFct(start_date,end_date):
|
|
|
|
|
|
sn_str="'"+sn+"'"
|
|
|
update_today_factor_flg=True
|
|
|
- sql_cmd3="select sn,date,a0,a1,a2,a3,a4 from tb_sn_factor where date="+start_date_str+" and sn="+sn_str
|
|
|
- factor_today_df=pd.read_sql(sql_cmd3, conn_local)
|
|
|
+ sql_cmd3="select sn,date,a0,a1,a2,a3,a4 from {} where date=".format(sn_table_name)+start_date_str+" and sn="+sn_str
|
|
|
+ factor_today_df=pd.read_sql(sql_cmd3, db_local)
|
|
|
if len(factor_today_df)>=1:
|
|
|
- print(sn+' '+start_date_str+' factor exist in table! Factor not update.')
|
|
|
+
|
|
|
update_today_factor_flg=False
|
|
|
|
|
|
- sql_cmd2="select sn,date,a0,a1,a2,a3,a4 from tb_sn_factor where date<"+start_date_str+" and sn="+sn_str
|
|
|
+ sql_cmd2="select sn,date,a0,a1,a2,a3,a4 from {} where date<".format(sn_table_name)+start_date_str+" and sn="+sn_str
|
|
|
|
|
|
- factor_df=pd.read_sql(sql_cmd2, conn_local)
|
|
|
+ factor_df=pd.read_sql(sql_cmd2, db_local)
|
|
|
|
|
|
|
|
|
factor_df=factor_df.drop_duplicates(subset=['sn','date'],keep='first')
|
|
@@ -218,10 +219,10 @@ def updtAllSnTodayFct(start_date,end_date):
|
|
|
|
|
|
|
|
|
if len(today_sn_fct_df)>=1:
|
|
|
- today_sn_fct_df.to_sql('tb_sn_factor',con=engine,chunksize=10000,if_exists='append',index=False)
|
|
|
+ today_sn_fct_df.to_sql(sn_table_name,con=db_engine,chunksize=10000,if_exists='append',index=False)
|
|
|
|
|
|
|
|
|
-def updtOneSnFct(sn,start_date,end_date):
|
|
|
+def updtOneSnFct(sn,start_date,end_date,db_engine, db_local, db_qx, sn_table_name='tb_sn_factor'):
|
|
|
'''计算开始时间到结束时间的,一个sn的所有factor。
|
|
|
重复多次调用,updtOneSnTodayFct。
|
|
|
'''
|
|
@@ -232,27 +233,27 @@ def updtOneSnFct(sn,start_date,end_date):
|
|
|
while i<=delta_day:
|
|
|
end_date=(start_date_datetime+datetime.timedelta(days=i)).strftime("%Y-%m-%d")
|
|
|
|
|
|
- updtOneSnTodayFct(sn,start_date,end_date)
|
|
|
+ updtOneSnTodayFct(sn,start_date,end_date,db_engine, db_local, db_qx, sn_table_name)
|
|
|
start_date=end_date
|
|
|
i+=1
|
|
|
|
|
|
-def updtOneSnTodayFct(sn,start_date,end_date):
|
|
|
+def updtOneSnTodayFct(sn,start_date,end_date,db_engine, db_local, db_qx, sn_table_name):
|
|
|
'''更新一个sn,一天的factor。'''
|
|
|
|
|
|
- conn_local = pymysql.connect(
|
|
|
- host='localhost',
|
|
|
- user='root',
|
|
|
- password='pengmin',
|
|
|
- database='qixiangdb',
|
|
|
- charset='utf8'
|
|
|
- )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
start_date_str="'"+start_date+"'"
|
|
|
end_date_str="'"+end_date+"'"
|
|
|
sn_str="'"+sn+"'"
|
|
|
sql_cmd="select * from drive_info where time between "+start_date_str+" and "+end_date_str+\
|
|
|
" and distance!=0 and name="+sn_str
|
|
|
- range_soc_df = pd.read_sql(sql_cmd, conn_qx)
|
|
|
+ range_soc_df = pd.read_sql(sql_cmd, db_qx)
|
|
|
|
|
|
if len(range_soc_df)>0:
|
|
|
|
|
@@ -265,14 +266,14 @@ def updtOneSnTodayFct(sn,start_date,end_date):
|
|
|
sn_str="'"+sn+"'"
|
|
|
|
|
|
update_today_factor_flg=True
|
|
|
- sql_cmd3="select sn,date,a0,a1,a2,a3,a4 from tb_sn_factor where date="+start_date_str+" and sn="+sn_str
|
|
|
- factor_today_df=pd.read_sql(sql_cmd3, conn_local)
|
|
|
+ sql_cmd3="select sn,date,a0,a1,a2,a3,a4 from {} where date=".format(sn_table_name)+start_date_str+" and sn="+sn_str
|
|
|
+ factor_today_df=pd.read_sql(sql_cmd3, db_local)
|
|
|
if len(factor_today_df)>=1:
|
|
|
- print(sn+' '+start_date_str+' factor exist in table! Factor not update.')
|
|
|
+
|
|
|
update_today_factor_flg=False
|
|
|
|
|
|
- sql_cmd2="select sn,date,a0,a1,a2,a3,a4 from tb_sn_factor where date<="+start_date_str+" and sn="+sn_str
|
|
|
- factor_df=pd.read_sql(sql_cmd2, conn_local)
|
|
|
+ sql_cmd2="select sn,date,a0,a1,a2,a3,a4 from {} where date<=".format(sn_table_name)+start_date_str+" and sn="+sn_str
|
|
|
+ factor_df=pd.read_sql(sql_cmd2, db_local)
|
|
|
|
|
|
factor_df=factor_df.drop_duplicates(subset=['sn','date'],keep='first')
|
|
|
|
|
@@ -313,13 +314,13 @@ def updtOneSnTodayFct(sn,start_date,end_date):
|
|
|
|
|
|
|
|
|
if len(today_sn_fct_df)>=1:
|
|
|
- today_sn_fct_df.to_sql('tb_sn_factor',con=engine,chunksize=10000,if_exists='append',index=False)
|
|
|
+ today_sn_fct_df.to_sql(sn_table_name,con=db_engine,chunksize=10000,if_exists='append',index=False)
|
|
|
|
|
|
return sn_factor_df_new
|
|
|
|
|
|
|
|
|
|
|
|
-def updtNewestFctTb():
|
|
|
+def updtNewestFctTb(db_local, db_engine, sn_table_name='tb_sn_factor', sn_newest_table_name='tb_sn_factor_newest'):
|
|
|
|
|
|
'''更新tb_sn_factor_newest,只保留最新日期的factor。
|
|
|
从tb_sn_factor中,筛选最新的日期。
|
|
@@ -329,8 +330,8 @@ def updtNewestFctTb():
|
|
|
current_time_str=current_time.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
current_time_str="'"+current_time_str+"'"
|
|
|
|
|
|
- sql_cmd_4="select sn,date,a0,a1,a2,a3,a4 from tb_sn_factor where date<"+current_time_str
|
|
|
- factor_all_df = pd.read_sql(sql_cmd_4, conn_local)
|
|
|
+ sql_cmd_4="select sn,date,a0,a1,a2,a3,a4 from {} where date<".format(sn_table_name)+current_time_str
|
|
|
+ factor_all_df = pd.read_sql(sql_cmd_4, db_local)
|
|
|
|
|
|
sn_list=factor_all_df['sn'].unique().tolist()
|
|
|
newest_sn_fct_df=pd.DataFrame([],columns=['sn','date','a0','a1','a2','a3','a4'])
|
|
@@ -344,7 +345,7 @@ def updtNewestFctTb():
|
|
|
|
|
|
|
|
|
|
|
|
- newest_sn_fct_df.to_sql('tb_sn_factor_newest',con=engine,chunksize=10000,\
|
|
|
+ newest_sn_fct_df.to_sql(sn_newest_table_name,con=db_engine,chunksize=10000,\
|
|
|
if_exists='replace',index=False)
|
|
|
|
|
|
def calDistFromFct(input_df):
|
|
@@ -372,7 +373,7 @@ def calDistFromFct(input_df):
|
|
|
row_df['vehelecrng']=range
|
|
|
return row_df
|
|
|
|
|
|
-def updtVehElecRng(input_time='2021-07-29 12:01:00'):
|
|
|
+def updtVehElecRng(db_qx, db_local, db_engine, range_table_name='tb_sn_factor_soc_range', sn_newest_table_name='tb_sn_factor_newest', input_time='2021-07-29 12:01:00'):
|
|
|
'''更新续驶里程,到tb_sn_factor_soc_range。
|
|
|
部署时设置每5min更新一次。
|
|
|
'''
|
|
@@ -389,14 +390,14 @@ def updtVehElecRng(input_time='2021-07-29 12:01:00'):
|
|
|
|
|
|
|
|
|
sql_cmd="select name,time,soc from drive_info where time between "+before6min_time_str+" and "+current_time_str
|
|
|
- print(sql_cmd)
|
|
|
- range_soc_df = pd.read_sql(sql_cmd, conn_qx)
|
|
|
+
|
|
|
+ range_soc_df = pd.read_sql(sql_cmd, db_qx)
|
|
|
range_soc_df.rename(columns={'name':'sn'},inplace=True)
|
|
|
|
|
|
|
|
|
- sql_cmd_1="select sn,a0,a1,a2,a3,a4 from tb_sn_factor_newest"
|
|
|
- print(sql_cmd_1)
|
|
|
- sn_factor_newest_df_raw = pd.read_sql(sql_cmd_1, conn_local)
|
|
|
+ sql_cmd_1="select sn,a0,a1,a2,a3,a4 from {}".format(sn_newest_table_name)
|
|
|
+
|
|
|
+ sn_factor_newest_df_raw = pd.read_sql(sql_cmd_1, db_local)
|
|
|
|
|
|
|
|
|
sn_soc_factor_df=pd.merge(range_soc_df,sn_factor_newest_df_raw,how='left',on='sn')
|
|
@@ -412,6 +413,6 @@ def updtVehElecRng(input_time='2021-07-29 12:01:00'):
|
|
|
sn_soc_factor_range_df=sn_soc_factor_range_df.append(sn_soc_factor_range_row)
|
|
|
|
|
|
|
|
|
- sn_soc_factor_range_df.to_sql('tb_sn_factor_soc_range',con=engine,chunksize=10000,\
|
|
|
+ sn_soc_factor_range_df.to_sql(range_table_name,con=db_engine,chunksize=10000,\
|
|
|
if_exists='replace',index=False)
|
|
|
|