77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
数据库更新脚本
|
||
用于更新现有的product_analysis表,添加follows字段
|
||
"""
|
||
|
||
import sqlite3
|
||
import os
|
||
from loguru import logger
|
||
import sys
|
||
|
||
# 配置日志
|
||
logger.remove()
|
||
logger.add(sys.stderr, level="INFO", format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>")
|
||
|
||
def update_product_analysis_table(db_path):
|
||
"""更新product_analysis表,添加follows字段"""
|
||
logger.info(f"开始更新数据库: {db_path}")
|
||
|
||
try:
|
||
# 连接数据库
|
||
conn = sqlite3.connect(db_path)
|
||
cursor = conn.cursor()
|
||
|
||
# 检查product_analysis表是否存在
|
||
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='product_analysis'")
|
||
table_exists = cursor.fetchone() is not None
|
||
|
||
if not table_exists:
|
||
logger.error("product_analysis表不存在,无法更新")
|
||
conn.close()
|
||
return False
|
||
|
||
# 检查follows字段是否已经存在
|
||
cursor.execute("PRAGMA table_info(product_analysis)")
|
||
columns = [col[1] for col in cursor.fetchall()]
|
||
|
||
if 'follows' in columns:
|
||
logger.info("follows字段已经存在,无需更新")
|
||
conn.close()
|
||
return True
|
||
|
||
# 添加follows字段
|
||
cursor.execute("ALTER TABLE product_analysis ADD COLUMN follows INTEGER")
|
||
conn.commit()
|
||
|
||
logger.success("成功为product_analysis表添加follows字段")
|
||
conn.close()
|
||
return True
|
||
|
||
except Exception as e:
|
||
logger.error(f"更新数据库失败: {e}")
|
||
if 'conn' in locals():
|
||
conn.close()
|
||
return False
|
||
|
||
def main():
|
||
"""主函数"""
|
||
# 获取默认数据库路径
|
||
default_db_path = os.path.join(os.path.dirname(__file__), "products.db")
|
||
|
||
logger.info("=== 数据库更新脚本开始执行 ===")
|
||
|
||
# 更新数据库
|
||
success = update_product_analysis_table(default_db_path)
|
||
|
||
if success:
|
||
logger.success("=== 数据库更新成功 ===")
|
||
sys.exit(0)
|
||
else:
|
||
logger.error("=== 数据库更新失败 ===")
|
||
sys.exit(1)
|
||
|
||
if __name__ == "__main__":
|
||
main()
|