fix: align zhihu and douyin postgres persistence by starCarlos · Pull Request #845 · NanmiCoder/MediaCrawler

fix: 对齐 zhihu 和 douyin 的 PostgreSQL 持久化兼容性

描述

变更概述

这个 PR 修复了 Zhihu 和 Douyin 在 PostgreSQL 场景下的入库兼容问题。

问题背景

1. Zhihu 入库失败

Zhihu 抓取结果中的时间字段是整数类型,但当前 ORM / PostgreSQL 表结构中对应字段是字符串或文本类型,例如:

  • created_time
  • updated_time
  • publish_time

这会导致 asyncpg 在写入内容和评论时直接报错。

2. Douyin 入库失败

Douyin 的抓取结果与 PostgreSQL 兼容 schema 之间存在字段类型不一致问题,主要包括:

  • aweme_id
  • comment_id
  • parent_comment_id
  • 部分 user/id 字段
  • like_count

这类问题会导致两种错误:

  • 查询时报错:character varying = bigint
  • 插入时报错:expected str, got int

本次修改内容

  • 在 Zhihu 入库前,将时间字段统一转为字符串
  • 将 Douyin ORM 中与项目 PostgreSQL schema 不一致的 ID 字段调整为字符串类型
  • 在 Douyin 入库前,对相关 ID / count 字段做字符串归一化
  • 修改 Douyin store 层的查询逻辑,避免再强制把 aweme_id / comment_id 转成整数

修改文件

  • database/models.py
  • store/douyin/init.py
  • store/douyin/_store_impl.py
  • store/zhihu/init.py

验证情况

在基于 PostgreSQL 的 BettaFish 集成环境中已验证:

  • Zhihu 内容入库正常
  • Zhihu 评论入库正常
  • Douyin 内容入库正常
  • Douyin 评论入库逻辑已通过实际数据库写入验证

说明

这个 PR 只包含持久化兼容性修复,不包含本地测试日志、临时配置和实验目录。