아무개의 조언대로 단순무식하게 들이박기로 함
Like문으로 어떻게 방법이 있을거다 라는 조언도 있었는데 하루정도 해보니까 정신 나갈거같아서 미래의 내게 그대로 넘기고옴
뭐 알아서 잘 만들겠지
최종 목표는 sql 한번 호출해서 동일한 기능을 수행할 수 있게 만드는거고
일단은 sql 두번에 걸쳐 호출하게 작성함
class tapp():
def __init__(self):
table_list = []
for i in range(255):
table_list.append(i)
for x in ['67', '166', '245', '120', '158']:
table_list.remove(int(x))
self.table_list = table_list
# self.table_list = [0, 2, 254] # test
self.engine = sqlalchemy.create_engine('mssql+pymssql://')
def inverters(self):
err_dict = {}
for table_no in self.table_list:
sql = f"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Table_{table_no}'"
table_df = pd.read_sql_query(sql, con=self.engine)
err_columns = table_df['COLUMN_NAME'].str.contains('_Error_Code')
cols_list = list(table_df.loc[err_columns, 'COLUMN_NAME'])
err_dict.update({table_no:cols_list})
return err_dict
def count_errors(self):
df_dict = {}
ins = tapp()
inv_dict = ins.inverters()
for no, col_list in inv_dict.items():
df_dict[f'table_{no}'] = {}
for col in col_list:
sql = f"SELECT DataSavedTime, {col} FROM Table_{no} WHERE {col} != 0"
col_df = pd.read_sql_query(sql, con=self.engine)
inverter_no = col.split('_Error_Code')[0]
df_dict[f'table_{no}'].update({inverter_no : col_df})
return df_dict
#########
(df_dict) Output:
{'table_0': {'Inverter1': DataSavedTime Inverter1_Error_Code
0 2022-12-17 22:41:00 655616.0
1 2022-12-17 22:42:00 655616.0
2 2022-12-17 22:43:00 655616.0
3 2022-12-17 22:44:00 655616.0
4 2022-12-17 22:45:00 655616.0 .... ,
'Inverter2': DataSavedTime Inverter2_Error_Code
0 2022-07-12 11:05:00 655363.0
1 2022-11-30 07:47:00 655616.0
2 2022-11-30 07:48:00 655616.0
3 2022-11-30 07:49:00 655616.0, .... , },
'table_1': {'Inverter1': .........