From c2096249d5c752e34ceac8cac77ec69debf45329 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Fri, 3 Jul 2026 09:28:27 +0300 Subject: [PATCH] =?UTF-8?q?fix(tradein/data):=20dry-run=20=D0=B1=D1=8D?= =?UTF-8?q?=D0=BA=D1=84=D0=B8=D0=BB=D0=BB=D0=B0=20=E2=80=94=20savepoint-?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B8=D1=82=D0=B5=D1=82=20=D1=81=20write-?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BA=D0=BE=D0=B9=20(#2236)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backfill_external_valuations_house_id.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tradein-mvp/backend/scripts/backfill_external_valuations_house_id.py b/tradein-mvp/backend/scripts/backfill_external_valuations_house_id.py index f5009937..e4983c10 100644 --- a/tradein-mvp/backend/scripts/backfill_external_valuations_house_id.py +++ b/tradein-mvp/backend/scripts/backfill_external_valuations_house_id.py @@ -165,21 +165,21 @@ def _process_row( stats.bump(row.source, "processed") try: - if dry_run: + # SAVEPOINT в обеих ветках: даже в dry-run matcher бьёт по БД (SELECT'ы), + # и его exception на реальной сессии перевёл бы транзакцию в aborted → + # каскад «current transaction is aborted» на всех последующих строках. + with db.begin_nested(): house_id = matcher(db, row.address) - else: - with db.begin_nested(): - house_id = matcher(db, row.address) - if house_id is not None: - db.execute( - text( - "UPDATE external_valuations " - " SET house_id = CAST(:hid AS bigint) " - " WHERE id = CAST(:eid AS bigint) " - " AND house_id IS NULL" - ), - {"hid": house_id, "eid": row.id}, - ) + if house_id is not None and not dry_run: + db.execute( + text( + "UPDATE external_valuations " + " SET house_id = CAST(:hid AS bigint) " + " WHERE id = CAST(:eid AS bigint) " + " AND house_id IS NULL" + ), + {"hid": house_id, "eid": row.id}, + ) if house_id is not None: stats.resolved += 1