From 96644599d315ecf6a474932b28be2dfa624707a6 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Sat, 22 Aug 2026 13:06:52 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20pymysql=20execute=20?= =?UTF-8?q?=E5=AD=97=E9=9D=A2=20%=20=E5=86=B2=E7=AA=81=20-=20SQL=20?= =?UTF-8?q?=E4=B8=AD=20motion=5F%=20=E7=9A=84=20%=20=E8=A2=AB=E5=BD=93?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8D=A0=E4=BD=8D=E7=AC=A6=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=20/api/ui/videos=20500,=20=E6=94=B9=E7=94=A8=20LEFT(filename,7?= =?UTF-8?q?)=3D'motion=5F'=20=E5=88=A4=E6=96=AD=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fam-core/src/fam_core/db_layer.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fam-core/src/fam_core/db_layer.py b/fam-core/src/fam_core/db_layer.py index e2c3221..1560651 100644 --- a/fam-core/src/fam_core/db_layer.py +++ b/fam-core/src/fam_core/db_layer.py @@ -114,7 +114,8 @@ def get_sync_videos(limit=15, offset=0, date_filter=None) -> List[Dict]: cur = conn.cursor(pymysql.cursors.DictCursor) # 录制时间优先,回退分析时间 date_expr = "COALESCE(NULLIF(event_start_time,''), processed_at, updated_at, created_at)" - content_filter = ("v.filename LIKE 'motion_%' " + # 注意:pymysql execute 用 % 做参数占位符,SQL 字面量不能含 %,故用 LEFT 判断 motion_ 前缀 + content_filter = ("LEFT(v.filename, 7) = 'motion_' " "OR EXISTS(SELECT 1 FROM sync_events se WHERE se.video_id = v.id)") if date_filter: cur.execute( @@ -530,7 +531,7 @@ def get_sync_stats(date_str: str = None) -> Dict: """SELECT (SELECT COUNT(*) FROM sync_videos sv WHERE sv.status='done' - AND (sv.filename LIKE 'motion_%' + AND (LEFT(sv.filename, 7) = 'motion_' OR EXISTS(SELECT 1 FROM sync_events se WHERE se.video_id=sv.id)) AND {d} LIKE %s) AS videos, (SELECT COUNT(*) FROM sync_events se @@ -545,7 +546,7 @@ def get_sync_stats(date_str: str = None) -> Dict: """SELECT (SELECT COUNT(*) FROM sync_videos WHERE status='done' - AND (filename LIKE 'motion_%' + AND (LEFT(filename, 7) = 'motion_' OR EXISTS(SELECT 1 FROM sync_events se WHERE se.video_id=sync_videos.id))) AS videos, (SELECT COUNT(*) FROM sync_events) AS events, (SELECT COALESCE(SUM(is_attention_event),0) FROM sync_events) AS attention""")