From 1f043148cfe9cd11b83bc9bbd592f72d7a94618c Mon Sep 17 00:00:00 2001 From: Wei Zang Date: Thu, 9 Apr 2026 07:43:32 +0100 Subject: [PATCH] Add script to keep 8 random prospects Introduce a maintenance script (app/api/prospects/sql/keep_random_8_prospects.py) that selects 8 random prospect IDs, prints them, then deletes all other prospect records and associated llm rows using a direct DB connection from app.utils.db.get_db_connection_direct. The script modifies sys.path to locate the app package and commits the destructive changes; intended for one-off cleanup/maintenance. --- .../prospects/sql/keep_random_8_prospects.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/api/prospects/sql/keep_random_8_prospects.py diff --git a/app/api/prospects/sql/keep_random_8_prospects.py b/app/api/prospects/sql/keep_random_8_prospects.py new file mode 100644 index 0000000..faa7549 --- /dev/null +++ b/app/api/prospects/sql/keep_random_8_prospects.py @@ -0,0 +1,30 @@ +import os +import sys +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../..'))) +from app.utils.db import get_db_connection_direct + +if __name__ == "__main__": + conn = get_db_connection_direct() + cur = conn.cursor() + + # Step 1: Select 8 random ids + cur.execute("SELECT id FROM prospects ORDER BY RANDOM() LIMIT 8;") + ids = [row[0] for row in cur.fetchall()] + print(f"Keeping these 8 ids: {ids}") + + # Step 2: Cascade delete llm records, then delete prospects + if ids: + format_strings = ','.join(['%s'] * len(ids)) + # First, delete llm records referencing prospects that will be deleted + delete_llm_sql = f"DELETE FROM llm WHERE prospect_id NOT IN ({format_strings});" + cur.execute(delete_llm_sql, ids) + # Now delete the prospects + delete_sql = f"DELETE FROM prospects WHERE id NOT IN ({format_strings});" + cur.execute(delete_sql, ids) + conn.commit() + print(f"Deleted all prospects except ids: {ids}") + else: + print("No records found in prospects table.") + + cur.close() + conn.close()