|
|
@@ -168,7 +168,22 @@ def get_list_single_page(log, sql_pool, page, cate_tuple):
|
|
|
info_list.append(data_dict)
|
|
|
|
|
|
if info_list:
|
|
|
- sql_pool.insert_many(table="pokemon_card_record", data_list=info_list, ignore=True)
|
|
|
+ # 用 upsert 入库:新卡照常插入;已存在的卡(唯一键 card_id+crawler_language)只刷新
|
|
|
+ # 分类三列(major_category_name/pg_label/sales_date),不动 card_name/card_no/img 等其它字段。
|
|
|
+ # 变更原因(2026/07/03):原 INSERT IGNORE 遇已存在卡会整行跳过,导致早期旧代码入库、
|
|
|
+ # 分类三列为 NULL 的历史行永远回填不上;改为 ON DUPLICATE KEY UPDATE 后重爬即可自愈。
|
|
|
+ cols = ["card_id", "major_category_name", "pg_label",
|
|
|
+ "sales_date", "detail_url", "img", "crawler_language"]
|
|
|
+ placeholders = ", ".join(["%s"] * len(cols))
|
|
|
+ upsert_sql = f"""
|
|
|
+ INSERT INTO pokemon_card_record ({', '.join(cols)}) VALUES ({placeholders})
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ major_category_name = VALUES(major_category_name),
|
|
|
+ pg_label = VALUES(pg_label),
|
|
|
+ sales_date = VALUES(sales_date)
|
|
|
+ """
|
|
|
+ args_list = [tuple(d[c] for c in cols) for d in info_list]
|
|
|
+ sql_pool.insert_many(query=upsert_sql, args_list=args_list)
|
|
|
|
|
|
return len(tag_li_list)
|
|
|
|