""" mark_cache_unwanted.py — Označí celé adresáře Tower/appdata a Tower/Sabnzbd jako nechceme (cache PhotoPrism/Immich + usenet download cache). wanted=FALSE, category='Odpad-cache' Idempotentní: díky filtru `category IS DISTINCT FROM 'Odpad-cache'` přepíše jen řádky, které ještě nejsou označené (vč. těch, co camera-rules omylem označily jako Rodina — jde o duplicitní cache kopie, ne originály). Jediná DB session, autocommit — žádné paralelní běhy (deadlock). """ import sys import psycopg2 sys.stdout.reconfigure(encoding="utf-8") DB = dict(host="192.168.1.76", port=5432, user="vladimir.buzalka", password="Vlado7309208104++", database="fotky_buzalkovi") DIRS = [ ("Tower/appdata (PhotoPrism/Immich cache)", "/mnt/user/ZalohaVsechObrazku/Tower/appdata%"), ("Tower/Sabnzbd (usenet download cache)", "/mnt/user/ZalohaVsechObrazku/Tower/Sabnzbd%"), ] conn = psycopg2.connect(**DB) conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) cur = conn.cursor() total = 0 for popis, like in DIRS: cur.execute(""" UPDATE photos p SET wanted = FALSE, category = 'Odpad-cache' FROM zaloha_obrazku z WHERE p.zaloha_id = z.id AND z.cesta_zalohy LIKE %s AND p.category IS DISTINCT FROM 'Odpad-cache' """, (like,)) print(f" {popis}: {cur.rowcount:,} řádků aktualizováno") total += cur.rowcount print(f"\nHotovo. Celkem aktualizováno: {total:,} řádků.") conn.close()