数据库初始化指南
本文档详细介绍如何使用db_init.py
脚本进行数据库初始化,包括SQLite和MySQL两种数据库类型的配置和初始化过程。
数据库概述
Visual_MediaCrawler项目支持两种数据库:
- SQLite:默认数据库,轻量级文件型数据库,无需额外配置,适合个人使用和小型部署
- 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
:指定数据库类型,可选值为sqlite
、mysql
或config
(使用配置文件默认设置)--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数据库文件位置。
初始化过程
- 脚本会检查指定路径的SQLite数据库文件是否存在
- 如果不存在,会创建新的数据库文件
- 使用
schema/sqlite_tables.sql
中的SQL语句创建表结构 - 初始化完成后,数据库文件会位于
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数据库前,需要确保:
- MySQL服务已安装并启动
- 已创建对应的数据库(默认为
mediacrawler
) - 配置的用户具有该数据库的创建表权限
创建数据库的SQL命令:
sql
CREATE DATABASE visual_mediacrawler;
初始化过程
- 脚本会尝试连接配置的MySQL数据库
- 使用
schema/mysql_tables.sql
中的SQL语句创建表结构 - 初始化完成后,数据库中会创建所有必要的表
数据库表结构
项目使用两个SQL文件定义数据库表结构:
schema/sqlite_tables.sql
:SQLite数据库表结构schema/mysql_tables.sql
:MySQL数据库表结构
这两个文件定义了相同的表结构,但针对各自数据库的特性进行了优化。主要表包括:
- 各平台的内容表(如
bilibili_video
、douyin_aweme
等) - 各平台的评论表(如
bilibili_video_comment
、douyin_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
如果没有错误输出,表示连接正常。