def fr_to_sql(df): df = df[df['Дата создания РЗ'] != ''] del df['Ведомственная принадлежность'] del df['Осложнение основного диагноза'] # ==== Репорт о количестве выздоровевших ===== report = pd.DataFrame() report.loc[0, 'date_rows'] = pd.to_datetime( df['Дата создания РЗ'], format='%d.%m.%Y').max().date() report.loc[0, 'value_name'] = 'Всего выздоровело от COVID' report.loc[0, 'value_count'] = len( df[df['Исход заболевания'].isin(['Выздоровление']) & df['Диагноз'].isin(['U07.1'])]) report.to_sql('values', con, schema='robo', index=False, if_exists='append') # ============ send_all('Файл в памяти, количество строк: ' + str(len(df))) sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]') send_all('Очистил input_fr') df.to_sql('cv_input_fr', con, schema='dbo', if_exists='append', index=False) send_all('Загрузил input_fr, запускаю процедуру') sql_execute('EXEC [dbo].[cv_Load_FedReg]') if check_table('fedreg'): send_all('Федеральный регистр успешно загружен') return 1 else: send_all('Произошла какая-то проблема с загрузкой фр') return 0
def read_part_df(excel, number): nameSheetShablon = "Sheet1" df = pd.read_excel(excel, sheet_name=nameSheetShablon, dtype=str, skiprows=1, head=1) send_all('прочтен файлик номер ' + list_numbers[number]) return df
def fr_death_to_sql(df): send_all('Обрезаю слишком длинные строки') for column in df.columns: for i in range(len(df)): df.loc[i, column] = str(df.at[i, column])[:255] send_all('Убираю Nan из таблицы') for column in df.columns: df[column] = df[column].str.replace(r'nan', '') send_all('Отправляю в базу') df.to_sql('cv_input_fr_d_all_2', con, schema='dbo', if_exists='replace', index=False) send_all('Запускаю процедуры') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_fr_d_all_2] EXEC [dbo].[cv_from_d_all_to_d_covid] EXEC [dbo].[cv_Load_FedReg_d_All] EXEC [dbo].[cv_Load_FedReg_d_covid] """) send_all('Успешно загружено') return 1
def fr_to_sql(df): df = df[df['Дата создания РЗ'] != ''] del df['Ведомственная принадлежность'] del df['Осложнение основного диагноза'] send_all('Файл в памяти, количество строк: ' + str(len(df))) sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]') send_all('Очистил input_fr') df.to_sql('cv_input_fr', con, schema='dbo', if_exists='append', index=False) send_all('Загрузил input_fr, запускаю процедуру') sql_execute('EXEC [dbo].[cv_Load_FedReg]') send_all('Федеральный регистр успешно загружен') return 1
def fr_lab_to_sql(df): send_all('Ну, тут надо переименовать колонки и можно грузить') i = 1 for column in df.columns: df.rename(columns={column: str(i)}, inplace=True) i += 1 df = df.dropna(subset=['1', '2', '3', '4', '5', '6']) send_all('Всего строк в лабе ' + str(len(df))) df.to_sql('cv_input_fr_lab_2', con, schema='dbo', if_exists='replace', index=False) send_all('Остались процедуры в базе') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_fr_lab_2] EXEC [dbo].[cv_load_frlab] """) if check_table('fedreg_lab'): send_all('Лаборатория успешно загружена') return 1 else: send_all('Какая-то проблема с загрузкой лаборатории') return 0
def UMSRS_to_sql(df): df.to_sql('cv_input_umsrs_2', con, schema='dbo', if_exists='append', index=False) send_all('Данные загружены в input_umsrs_2, запускаю процедурки') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_umsrs_2] EXEC [dbo].[cv_Load_UMSRS] """) if check_table('umsrs'): send_all('Успешно выполнено!') return 1 else: send_all('Какая-то проблема с загрузкой УМСРС') return 0
def load_fr_lab(): def fr_lab_to_sql(df): send_all('Ну, тут надо переименовать колонки и можно грузить') i = 1 for column in df.columns: df.rename(columns={column: str(i)}, inplace=True) i += 1 df = df.dropna(subset=['1', '2', '3', '4', '5', '6']) send_all('Всего строк в лабе ' + str(len(df))) df.to_sql('cv_input_fr_lab_2', con, schema='dbo', if_exists='replace', index=False) send_all('Остались процедуры в базе') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_fr_lab_2] EXEC [dbo].[cv_load_frlab] """) send_all('Лаборатория успешно загружена') return 1 send_all('Посмотрим на файлик лабораторных исследований') search = search_file('fr_lab') if search[0] and search[1]: send_all('Найден файл:\n' + search[2].split('\\')[-1]) send_all('Сейчас мы его рассмотрим...') check = check_file(search[2], 'fr_lab') if check[0]: send_all('Неужели файл все-таки можно загрузить?') df = pd.read_csv(search[2], header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_lab_to_sql(df) else: send_all('Не, плохой файл!') send_all(str(check)) return 0 else: if search[0]: send_all('Ну, это точно нужно перевести в csv!') file_csv = excel_to_csv(search[2]) send_all('Результат:\n' + file_csv.split('\\')[-1]) check = check_file(file_csv, 'fr_lab') if check[0]: send_all('Теперь можно и загрузить в память') df = pd.read_csv(file_csv, header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_lab_to_sql(df) else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: send_all('Не найден файл лаборатории') return 0
def load_fr_death(): def fr_death_to_sql(df): send_all('Обрезаю слишком длинные строки') for column in df.columns: for i in range(len(df)): df.loc[i, column] = str(df.at[i, column])[:255] send_all('Убираю Nan из таблицы') for column in df.columns: df[column] = df[column].str.replace(r'nan', '') send_all('Отправляю в базу') df.to_sql('cv_input_fr_d_all_2', con, schema='dbo', if_exists='replace', index=False) send_all('Запускаю процедуры') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_fr_d_all_2] EXEC [dbo].[cv_from_d_all_to_d_covid] EXEC [dbo].[cv_Load_FedReg_d_All] EXEC [dbo].[cv_Load_FedReg_d_covid] """) send_all('Успешно загружено') return 1 send_all('Пришло время спокойных') search = search_file('fr_death') if search[0] and search[1]: send_all('Найден файл:\n' + search[2].split('\\')[-1]) send_all('Сейчас мы его рассмотрим...') check = check_file(search[2], 'fr_death') if check[0]: send_all('Похоже файл в порядке, попробую загрузить') df = pd.read_csv(search[2], header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_death_to_sql(df) else: send_all('Что-то с файлом') send_all(str(check)) return 0 else: if search[0]: send_all('Давайте всё-таки работать с csv, конвертирую') file_csv = excel_to_csv(search[2]) send_all('Результат:\n' + file_csv.split('\\')[-1]) check = check_file(file_csv, 'fr_death') if check[0]: send_all('Теперь можно и загрузить в память') df = pd.read_csv(file_csv, header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_death_to_sql(df) else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: send_all('Не найден файл умерших') return 0
def load_fr(): def fr_to_sql(df): df = df[df['Дата создания РЗ'] != ''] del df['Ведомственная принадлежность'] del df['Осложнение основного диагноза'] send_all('Файл в памяти, количество строк: ' + str(len(df))) sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]') send_all('Очистил input_fr') df.to_sql('cv_input_fr', con, schema='dbo', if_exists='append', index=False) send_all('Загрузил input_fr, запускаю процедуру') sql_execute('EXEC [dbo].[cv_Load_FedReg]') send_all('Федеральный регистр успешно загружен') return 1 send_all('Я проснулся и хочу грузить фр!') search = search_file('fr') if search[0] and search[1]: send_all('Вот нашёлся такой файлик:\n' + search[2].split('\\')[-1]) send_all('Сейчас я его проверю...') check = check_file(search[2], 'fr') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(search[2], header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_to_sql(df) else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: if search[0]: send_all('Нее... я не хочу работать с xlsx, щас конвертирую!') file_csv = excel_to_csv(search[2]) send_all('Результат:\n' + file_csv.split('\\')[-1]) check = check_file(file_csv, 'fr') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(file_csv, header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_to_sql(df) else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: send_all('Но я не нашёл файла федерального регистра (((') return 0 return 1
def load_report_vp_and_cv(a): def open_save(file): xcl = win32com.client.Dispatch("Excel.Application") wb = xcl.Workbooks.Open(file) xcl.DisplayAlerts = False wb.SaveAs(file) xcl.Quit() del xcl def load_file_mo(file): nameMO = pd.read_excel(file, sheet_name='Титул', header=3, usecols='H', nrows=1).iloc[0, 0] df = pd.read_excel(file, sheet_name='Данные1', header=6, usecols='C:AH', nrows=1) df = df.fillna(0) df['nameMO'] = nameMO os.replace(file, path + r'\\' + os.path.basename(file)) return df def check_data_table(name): sql = f""" IF (EXISTS (SELECT * FROM {name})) SELECT 1 ELSE SELECT 0 """ return pd.read_sql(sql, conn).iat[0, 0] send_all('Продготовка к отчету Мониторинг ВП и COVID') files = glob.glob(get_dir('VP_CV') + r'\из_почты\[!~$]*.xls*') if len(files) == 0: raise my_except('Папка пустая!') path = get_dir('VP_CV') + r'\\' + datetime.datetime.now().strftime( "%Y%m%d") if os.path.exists(path): pass else: try: os.mkdir(path) except OSError: raise my_except('не смог создать папку') list_ = [] excel = pd.DataFrame() for file in files: try: excel = load_file_mo(file) except: open_save(file) try: excel = load_file_mo(file) except: send_all('не обработался следующий файл \n' + file.split('\\')[-1]) else: list_.append(excel) else: list_.append(excel) if len(list_): df = pd.concat(list_) else: raise my_except('Не один файл не обработался') df = df.set_axis([ 'vp_03_Power_Count_Departments', 'vp_04_Power_Count_Allocated_All', 'vp_05_Power_Count_Allocated', 'vp_06_Power_Count_Reanimation_All', 'vp_07_Power_Count_Reanimation', 'vp_08_Hospital_All', 'vp_09_Hospital_Day', 'vp_10_Hospital_Hard_All', 'vp_11_Hospital_Hard_Reaniamation', 'vp_12_Hospital_Hard_Ivl', 'vp_13_ReceivedAll', 'vp_14_ReceivedDay', 'vp_15_DischargedAll', 'vp_16_DischargedDay', 'vp_17_DiedAll', 'vp_18_DiedDay', 'cv_19_Power_Count_Departments', 'cv_20_Power_Count_Allocated_All', 'cv_21_Power_Count_Allocated', 'cv_22_Power_Count_Reanimation_All', 'cv_23_Power_Count_Reanimation', 'cv_24_Hospital_All', 'cv_25_Hospital_Day', 'cv_26_Hospital_Hard_All', 'cv_27_Hospital_Hard_Reaniamation', 'cv_28_Hospital_Hard_Ivl', 'cv_29_ReceivedAll', 'cv_30_ReceivedDay', 'cv_31_DischargedAll', 'cv_32_DischargedDay', 'cv_33_DiedAll', 'cv_34_DiedDay', 'nameMO' ], axis=1, inplace=False) try: df.to_sql('HistoryFileMO', con, schema='mon_vp', index=False, if_exists='append') except: raise my_except('не удалось загрузить в базу!') if check_data_table('mon_vp.v_DebtorsReport'): return short_report('SELECT * FROM mon_vp.v_DebtorsReport') else: #========== тут мы грузим исходные данные в первую вкладку отчета df = pd.read_sql('SELECT * FROM mon_vp.v_GrandReport', conn) df1 = df.loc[df.typeMO == 1].sort_values(["numSort"]).drop( 'typeMO', 1).drop('numSort', 1) df2 = df.loc[df.typeMO == 2].sort_values(["numSort"]).drop( 'typeMO', 1).drop('numSort', 1) shablon = get_dir('help') + r'\СводОбщий_' + ( datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%d %m %Y") + '.xlsx' shutil.copyfile( get_dir('help') + r'\шаблон Мониторинг ВП.xlsx', shablon) wb = openpyxl.load_workbook(shablon) ws = wb['Данные'] ws.cell(row=1, column=2, value=(datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%d.%m.%Y")) rows = dataframe_to_rows(df1, index=False, header=False) for r_idx, row in enumerate(rows, 9): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) rows = dataframe_to_rows(df2, index=False, header=False) for r_idx, row in enumerate(rows, 73): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) wb.save(shablon) # ========== сейчас мы загрузим и сохраним данные по проверкам df = pd.read_sql("exec mon_vp.p_CheckMonitorVpAndCovid", conn) part_one = df.iloc[:, range(26)] part_two = df.iloc[:, [0] + list(range(26, 58, 1))] wb = openpyxl.load_workbook(shablon) ws = wb['Проверка'] rows = dataframe_to_rows(part_one, index=False, header=False) for r_idx, row in enumerate(rows, 3): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) wb.save(shablon) wb = openpyxl.load_workbook(shablon) ws = wb['Разница'] rows = dataframe_to_rows(part_two, index=False, header=False) for r_idx, row in enumerate(rows, 7): for c_idx, value in enumerate(row, 1): ws.cell(row=r_idx, column=c_idx, value=value) wb.save(shablon) try: shutil.copyfile(shablon, get_dir('VP_CV') + '\\' + shablon.split('\\')[-1]) except PermissionError: raise my_except('Закройте файлик! Не могу скопировать') return shablon
def load_UMSRS(a): def UMSRS_to_sql(df): df.to_sql('cv_input_umsrs_2', con, schema='dbo', if_exists='append', index=False) send_all('Данные загружены в input_umsrs_2, запускаю процедурки') sql_execute(""" EXEC [dbo].[Insert_Table_cv_input_umsrs_2] EXEC [dbo].[cv_Load_UMSRS] """) if check_table('umsrs'): send_all('Успешно выполнено!') return 1 else: send_all('Какая-то проблема с загрузкой УМСРС') return 0 send_all('А теперь будем грузить УМСРС') search = search_file('UMSRS') if search[0] and search[1]: send_all('файл уже сконвертирован:\n' + search[2].split('\\')[-1]) send_all('Посмотрим что внутри...') check = check_file(search[2], 'UMSRS') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(search[2], header=check[3], usecols=check[2], names=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') UMSRS_to_sql(df) return 1 else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: if search[0]: send_all('Нее... я не хочу работать с xlsx, щас конвертирую!') file_csv = excel_to_csv(search[2]) send_all('Результат:\n' + file_csv.split('\\')[-1]) check = check_file(file_csv, 'UMSRS') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(file_csv, header=check[3], usecols=check[2], names=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') UMSRS_to_sql(df) return 1 else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: send_all('Но я не нашёл файла УМСРС! (((') return 0
def load_fr(a): def fr_to_sql(df): df = df[df['Дата создания РЗ'] != ''] del df['Ведомственная принадлежность'] del df['Осложнение основного диагноза'] # ==== Репорт о количестве выздоровевших ===== report = pd.DataFrame() report.loc[0, 'date_rows'] = pd.to_datetime( df['Дата создания РЗ'], format='%d.%m.%Y').max().date() report.loc[0, 'value_name'] = 'Всего выздоровело от COVID' report.loc[0, 'value_count'] = len( df[df['Исход заболевания'].isin(['Выздоровление']) & df['Диагноз'].isin(['U07.1'])]) report.to_sql('values', con, schema='robo', index=False, if_exists='append') # ============ send_all('Файл в памяти, количество строк: ' + str(len(df))) sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]') send_all('Очистил input_fr') df.to_sql('cv_input_fr', con, schema='dbo', if_exists='append', index=False) send_all('Загрузил input_fr, запускаю процедуру') sql_execute('EXEC [dbo].[cv_Load_FedReg]') if check_table('fedreg'): send_all('Федеральный регистр успешно загружен') return 1 else: send_all('Произошла какая-то проблема с загрузкой фр') return 0 send_all('Я проснулся и хочу грузить фр!') search = search_file('fr') if search[0] and search[1]: send_all('Вот нашёлся такой файлик:\n' + search[2].split('\\')[-1]) send_all('Сейчас я его проверю...') check = check_file(search[2], 'fr') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(search[2], header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') print(df.head(3)) fr_to_sql(df) return 1 else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: if search[0]: send_all('Нее... я не хочу работать с xlsx, щас конвертирую!') file_csv = excel_to_csv(search[2]) send_all('Результат:\n' + file_csv.split('\\')[-1]) check = check_file(file_csv, 'fr') if check[0]: send_all('Файл прошёл проверку, начинаю грузить в память') df = pd.read_csv(file_csv, header=check[3], usecols=check[2], na_filter=False, dtype=str, delimiter=';', engine='python') fr_to_sql(df) return 1 else: send_all('Файл не прошёл проверку!') send_all(check[1]) return 0 else: send_all('Но я не нашёл файла федерального регистра (((') return 0 return 1