fix: 修复SQLite数据库初始化问题并重新生成数据库文件

- db.py: 在init_table_schema函数中增加损坏数据库文件检查和清理逻辑,确保SQLite初始化时能创建干净的数据库文件
- schema/sqlite_tables.db: 重新生成完整的SQLite数据库文件,包含所有平台的表结构和索引
This commit is contained in:
买定不离手
2025-07-16 19:48:52 +08:00
parent 3365095c62
commit 9457455c18
2 changed files with 19 additions and 0 deletions

19
db.py
View File

@@ -107,6 +107,25 @@ async def init_table_schema(db_type: str = None):
if db_type == "sqlite":
utils.logger.info("[init_table_schema] begin init sqlite table schema ...")
# 检查并删除可能存在的损坏数据库文件
import os
if os.path.exists(config.SQLITE_DB_PATH):
try:
# 尝试删除现有的数据库文件
os.remove(config.SQLITE_DB_PATH)
utils.logger.info(f"[init_table_schema] removed existing sqlite db file: {config.SQLITE_DB_PATH}")
except Exception as e:
utils.logger.warning(f"[init_table_schema] failed to remove existing sqlite db file: {e}")
# 如果删除失败,尝试重命名文件
try:
backup_path = f"{config.SQLITE_DB_PATH}.backup_{utils.get_current_timestamp()}"
os.rename(config.SQLITE_DB_PATH, backup_path)
utils.logger.info(f"[init_table_schema] renamed existing sqlite db file to: {backup_path}")
except Exception as rename_e:
utils.logger.error(f"[init_table_schema] failed to rename existing sqlite db file: {rename_e}")
raise rename_e
await init_sqlite_db()
async_db_obj: AsyncSqliteDB = media_crawler_db_var.get()
async with aiofiles.open("schema/sqlite_tables.sql", mode="r", encoding="utf-8") as f:

View File

Binary file not shown.