blob: e50b4e9f9466a4f87a478cdbd189785c1329606f [file] [log] [blame]
wht47695372025-06-07 17:23:42 +08001import pymysql
2import datetime
3from collections import defaultdict
4
5SqlURL = "10.126.59.25"
6SqlPort = 3306
7Database = "pt_database_test"
8SqlUsername = "root"
9SqlPassword = "123456"
10
11
12def fetch_data():
13 conn = pymysql.connect(
14 host=SqlURL,
15 port=SqlPort,
16 user=SqlUsername,
17 password=SqlPassword,
18 database=Database,
19 charset="utf8mb4"
20 )
21 cursor = conn.cursor()
22 cursor.execute("SELECT user_id, seed_id, download_start FROM SeedDownload")
23 download_rows = cursor.fetchall()
24 cursor.execute("SELECT user_id, seed_id, created_at FROM UserFavorite")
25 favorite_rows = cursor.fetchall()
26 cursor.close()
27 conn.close()
28 return download_rows, favorite_rows
29
30
31def process_records(download_rows, favorite_rows):
32 records = []
33 user_set = set()
34 seed_set = set()
35 for row in download_rows:
36 user_id, seed_id, created_at = row
37 user_set.add(user_id)
38 seed_set.add(seed_id)
39 if isinstance(created_at, datetime.datetime):
40 ts = int(created_at.timestamp())
41 else:
42 ts = 0
43 records.append((user_id, seed_id, ts))
44 for row in favorite_rows:
45 user_id, seed_id, created_at = row
46 user_set.add(user_id)
47 seed_set.add(seed_id)
48 if isinstance(created_at, datetime.datetime):
49 ts = int(created_at.timestamp())
50 else:
51 ts = 0
52 records.append((user_id, seed_id, ts))
53 return records, user_set, seed_set
54
55
56def build_id_maps(user_set, seed_set):
57 user2idx = {uid: idx for idx, uid in enumerate(sorted(user_set))}
58 seed2idx = {sid: idx for idx, sid in enumerate(sorted(seed_set))}
59 return user2idx, seed2idx
60
61
62def group_and_write(records, user2idx, seed2idx, output_path="./user_seed_graph.txt"):
63 user_items = defaultdict(list)
64 user_times = defaultdict(list)
65 for user_id, seed_id, ts in records:
66 uid = user2idx[user_id]
67 sid = seed2idx[seed_id]
68 user_items[uid].append(sid)
69 user_times[uid].append(ts)
70 print(user_items)
71 print(user_times)
72 with open(output_path, "w", encoding="utf-8") as f:
73 for uid in sorted(user_items.keys()):
74 items = " ".join(str(item) for item in user_items[uid])
75 times = " ".join(str(t) for t in user_times[uid])
76 f.write(f"{uid}\t{items}\t{times}\n")
77
78
79def main():
80 download_rows, favorite_rows = fetch_data()
81 records, user_set, seed_set = process_records(download_rows, favorite_rows)
82 user2idx, seed2idx = build_id_maps(user_set, seed_set)
83 group_and_write(records, user2idx, seed2idx)
84
85
86if __name__ == "__main__":
87 main()