아무개의 조언대로 단순무식하게 들이박기로 함


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':   .........