From 0c5486ce6149d6cbf5205986f80e65bb8c453ad9 Mon Sep 17 00:00:00 2001 From: bn_user Date: Thu, 13 Nov 2025 18:09:56 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20dags/fin=5Fporfel.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dags/fin_porfel.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) 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 'Обновлять нечего.'