diff --git a/dags/fin_porfel.py b/dags/fin_porfel.py index 88c7785..b28e02f 100644 --- a/dags/fin_porfel.py +++ b/dags/fin_porfel.py @@ -36,7 +36,8 @@ def upsert_list_fin_portfel(**kwargs): engine = get_db_engine() query = """ select distinct - osv.schet as schet + osv.uid_dogovor + , osv.schet as schet , osv.subkonto2 as subkonto2 , null as summa_dogovora , null as percent_value @@ -50,9 +51,29 @@ def upsert_list_fin_portfel(**kwargs): df = pd.read_sql(query, engine) with engine.begin() as conn: if not df.empty: - conn.execute("CREATE TEMP TABLE temp_fin_porfel (schet text null, subkonto2 text null, summa_dogovora text null, percent_value text null)") + conn.execute("CREATE TEMP TABLE temp_fin_porfel (uid_dogovor text null, schet text null, subkonto2 text null, summa_dogovora text null, percent_value text null)") df.to_sql('temp_fin_porfel', con=conn, if_exists='append', index=False, method='multi') - conn.execute("INSERT INTO public.fin_porfel (schet, subkonto2, summa_dogovora, percent_value) SELECT distinct schet, subkonto2, summa_dogovora, percent_value FROM temp_fin_porfel") + conn.execute(""" + INSERT INTO public.fin_porfel (uid_dogovor, schet, subkonto2, summa_dogovora, percent_value) + SELECT DISTINCT + uid_dogovor + , schet + , subkonto2 + , summa_dogovora + , percent_value + FROM temp_fin_porfel + ON CONFLICT (uid_dogovor, schet) + DO UPDATE SET + subkonto2 = EXCLUDED.subkonto2, + summa_dogovora = EXCLUDED.summa_dogovora, + percent_value = EXCLUDED.percent_value + """ + ) + conn.execute(""" + UPDATE public.fin_porfel fp + SET fp.id = row_nubmer() over (order by uid_dogovor, schet, summa_dogovora) + """ + ) return 'Список обновлен.' else: return 'Обновлять нечего.'