Skip to content

数据库初始化指南

本文档详细介绍如何使用db_init.py脚本进行数据库初始化,包括SQLite和MySQL两种数据库类型的配置和初始化过程。

数据库概述

Visual_MediaCrawler项目支持两种数据库:

  1. SQLite:默认数据库,轻量级文件型数据库,无需额外配置,适合个人使用和小型部署
  2. MySQL:可选数据库,支持更大规模的数据存储和并发访问,适合团队使用和大型部署

数据库初始化工具

db_init.py是项目提供的数据库初始化工具,用于创建和初始化数据库表结构。该工具支持以下功能:

  • 创建SQLite或MySQL数据库表结构
  • 检查数据库是否已初始化
  • 强制重新初始化数据库(会删除现有数据)
  • 交互式选择数据库类型

使用方法

基本用法

最简单的使用方式是直接运行脚本,进入交互式模式:

bash
python db_init.py

执行后,脚本会提示选择数据库类型:

=== 数据库初始化工具 ===
请选择要初始化的数据库类型:
1. sqlite - SQLite数据库
2. mysql - MySQL数据库
3. config - 使用配置文件默认设置

请输入选项 (1/2/3):

命令行参数

db_init.py支持以下命令行参数:

  • --db-type:指定数据库类型,可选值为sqlitemysqlconfig(使用配置文件默认设置)
  • --init-schema:初始化数据库表结构
  • --init-connection:仅初始化数据库连接
  • --force:强制初始化,即使数据库已存在
  • --interactive:交互式模式,手动选择数据库类型

示例:

bash
# 初始化SQLite数据库
python db_init.py --db-type sqlite

# 强制重新初始化MySQL数据库
python db_init.py --db-type mysql --force

# 使用配置文件默认设置初始化数据库
python db_init.py --db-type config

# 仅初始化数据库连接
python db_init.py --db-type sqlite --init-connection

SQLite数据库初始化

配置说明

SQLite数据库配置位于config/db_config.py文件中:

python
SQLITE_DB_PATH = "schema/sqlite_tables.db"

可以修改此路径指向自定义的SQLite数据库文件位置。

初始化过程

  1. 脚本会检查指定路径的SQLite数据库文件是否存在
  2. 如果不存在,会创建新的数据库文件
  3. 使用schema/sqlite_tables.sql中的SQL语句创建表结构
  4. 初始化完成后,数据库文件会位于schema/sqlite_tables.db

MySQL数据库初始化

配置说明

MySQL数据库配置位于config/db_config.py文件中:

python
MYSQL_DB_HOST = os.environ.get("MYSQL_DB_HOST", "localhost")
MYSQL_DB_PORT = int(os.environ.get("MYSQL_DB_PORT", 3306))
MYSQL_DB_USER = os.environ.get("MYSQL_DB_USER", "root")
MYSQL_DB_PWD = os.environ.get("MYSQL_DB_PWD", "password")
MYSQL_DB_NAME = os.environ.get("MYSQL_DB_NAME", "mediacrawler")

可以通过环境变量或直接修改配置文件来设置MySQL连接参数。

初始化前准备

在初始化MySQL数据库前,需要确保:

  1. MySQL服务已安装并启动
  2. 已创建对应的数据库(默认为mediacrawler
  3. 配置的用户具有该数据库的创建表权限

创建数据库的SQL命令:

sql
CREATE DATABASE visual_mediacrawler;

初始化过程

  1. 脚本会尝试连接配置的MySQL数据库
  2. 使用schema/mysql_tables.sql中的SQL语句创建表结构
  3. 初始化完成后,数据库中会创建所有必要的表

数据库表结构

项目使用两个SQL文件定义数据库表结构:

  • schema/sqlite_tables.sql:SQLite数据库表结构
  • schema/mysql_tables.sql:MySQL数据库表结构

这两个文件定义了相同的表结构,但针对各自数据库的特性进行了优化。主要表包括:

  • 各平台的内容表(如bilibili_videodouyin_aweme等)
  • 各平台的评论表(如bilibili_video_commentdouyin_aweme_comment等)
  • 各平台的用户/创作者表(如bilibili_up_info等)

强制重新初始化

如果需要重新初始化已存在的数据库(会删除所有现有数据),可以使用--force参数:

bash
python db_init.py --db-type sqlite --force

在交互式模式下,脚本会提示确认:

⚠️  检测到 SQLITE 数据库已存在且包含表结构!
数据库已完成初始化,继续操作将删除所有现有数据!

请选择操作:
1. 取消操作,保留现有数据
2. 强制重新初始化(⚠️ 将删除所有现有数据)

请输入选项 (1/2):

故障排除

SQLite初始化问题

  • 权限问题:确保有权限写入SQLite数据库文件所在目录
  • 文件锁定:确保没有其他程序正在使用SQLite数据库文件
  • 路径问题:确保SQLite数据库路径正确

MySQL初始化问题

  • 连接失败:检查MySQL服务是否运行,以及连接参数是否正确
  • 权限不足:确保配置的用户具有创建表的权限
  • 数据库不存在:确保已创建对应的数据库

通用问题

  • 模块导入错误:确保已安装所有依赖,可以运行uv sync更新依赖
  • SQL语法错误:如果修改了SQL文件,确保语法正确

数据库连接验证

初始化完成后,可以验证数据库连接是否正常:

bash
python db_init.py --db-type sqlite --init-connection

如果没有错误输出,表示连接正常。

Released under the 'NON-COMMERCIAL LEARNING LICENSE 1.1' License