From 87c5a0721947e36a5d8a8e8c51ca75531c7392b1 Mon Sep 17 00:00:00 2001 From: Jiang Date: Wed, 7 Jan 2026 18:09:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9scheme.py=E7=9A=84=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=AD=98=E5=82=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- timescaledb/schemas/scheme.py | 40 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/timescaledb/schemas/scheme.py b/timescaledb/schemas/scheme.py index 54e170b..b59d4a2 100644 --- a/timescaledb/schemas/scheme.py +++ b/timescaledb/schemas/scheme.py @@ -18,18 +18,18 @@ class SchemeRepository: if not data: return - # 假设同一批次的数据时间、scheme_type、scheme_name 是相同的 - target_time = data[0]["time"] + # 获取批次中所有不同的时间点 + all_times = list(set(item["time"] for item in data)) target_scheme_type = data[0]["scheme_type"] target_scheme_name = data[0]["scheme_name"] # 使用事务确保原子性 async with conn.transaction(): async with conn.cursor() as cur: - # 1. 先删除该时间点、scheme_type、scheme_name 的旧数据 + # 1. 删除该批次涉及的所有时间点、scheme_type、scheme_name 的旧数据 await cur.execute( - "DELETE FROM scheme.link_simulation WHERE time = %s AND scheme_type = %s AND scheme_name = %s", - (target_time, target_scheme_type, target_scheme_name), + "DELETE FROM scheme.link_simulation WHERE time = ANY(%s) AND scheme_type = %s AND scheme_name = %s", + (all_times, target_scheme_type, target_scheme_name), ) # 2. 使用 COPY 快速写入新数据 @@ -60,18 +60,18 @@ class SchemeRepository: if not data: return - # 假设同一批次的数据时间、scheme_type、scheme_name 是相同的 - target_time = data[0]["time"] + # 获取批次中所有不同的时间点 + all_times = list(set(item["time"] for item in data)) target_scheme_type = data[0]["scheme_type"] target_scheme_name = data[0]["scheme_name"] # 使用事务确保原子性 with conn.transaction(): with conn.cursor() as cur: - # 1. 先删除该时间点、scheme_type、scheme_name 的旧数据 + # 1. 删除该批次涉及的所有时间点、scheme_type、scheme_name 的旧数据 cur.execute( - "DELETE FROM scheme.link_simulation WHERE time = %s AND scheme_type = %s AND scheme_name = %s", - (target_time, target_scheme_type, target_scheme_name), + "DELETE FROM scheme.link_simulation WHERE time = ANY(%s) AND scheme_type = %s AND scheme_name = %s", + (all_times, target_scheme_type, target_scheme_name), ) # 2. 使用 COPY 快速写入新数据 @@ -252,18 +252,18 @@ class SchemeRepository: if not data: return - # 假设同一批次的数据时间、scheme_type、scheme_name 是相同的 - target_time = data[0]["time"] + # 获取批次中所有不同的时间点 + all_times = list(set(item["time"] for item in data)) target_scheme_type = data[0]["scheme_type"] target_scheme_name = data[0]["scheme_name"] # 使用事务确保原子性 async with conn.transaction(): async with conn.cursor() as cur: - # 1. 先删除该时间点、scheme_type、scheme_name 的旧数据 + # 1. 删除该批次涉及的所有时间点、scheme_type、scheme_name 的旧数据 await cur.execute( - "DELETE FROM scheme.node_simulation WHERE time = %s AND scheme_type = %s AND scheme_name = %s", - (target_time, target_scheme_type, target_scheme_name), + "DELETE FROM scheme.node_simulation WHERE time = ANY(%s) AND scheme_type = %s AND scheme_name = %s", + (all_times, target_scheme_type, target_scheme_name), ) # 2. 使用 COPY 快速写入新数据 @@ -289,18 +289,18 @@ class SchemeRepository: if not data: return - # 假设同一批次的数据时间、scheme_type、scheme_name 是相同的 - target_time = data[0]["time"] + # 获取批次中所有不同的时间点 + all_times = list(set(item["time"] for item in data)) target_scheme_type = data[0]["scheme_type"] target_scheme_name = data[0]["scheme_name"] # 使用事务确保原子性 with conn.transaction(): with conn.cursor() as cur: - # 1. 先删除该时间点、scheme_type、scheme_name 的旧数据 + # 1. 删除该批次涉及的所有时间点、scheme_type、scheme_name 的旧数据 cur.execute( - "DELETE FROM scheme.node_simulation WHERE time = %s AND scheme_type = %s AND scheme_name = %s", - (target_time, target_scheme_type, target_scheme_name), + "DELETE FROM scheme.node_simulation WHERE time = ANY(%s) AND scheme_type = %s AND scheme_name = %s", + (all_times, target_scheme_type, target_scheme_name), ) # 2. 使用 COPY 快速写入新数据