- 移除顶部热门工具排行榜模块 - 在标签下方添加三个tab(最新/热门/推荐) - 添加is_recommended字段到Site模型 - 创建数据库迁移脚本add_is_recommended.py - 更新后台管理界面支持推荐标记 - 更新分页链接保持tab状态 - 所有功能已本地测试验证通过 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
"""
|
|
数据库迁移脚本: 为sites表添加is_recommended字段
|
|
执行方法: python migrations/add_is_recommended.py
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
# 添加项目根目录到sys.path
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from app import create_app
|
|
from models import db
|
|
|
|
def upgrade():
|
|
"""添加is_recommended字段"""
|
|
app = create_app(os.getenv('FLASK_ENV', 'development'))
|
|
|
|
with app.app_context():
|
|
try:
|
|
# 检查字段是否已存在
|
|
result = db.session.execute(db.text(
|
|
"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS "
|
|
"WHERE TABLE_NAME = 'sites' AND COLUMN_NAME = 'is_recommended'"
|
|
))
|
|
|
|
if result.fetchone():
|
|
print("字段 is_recommended 已存在,跳过迁移")
|
|
return
|
|
|
|
# 添加字段
|
|
print("开始添加 is_recommended 字段...")
|
|
db.session.execute(db.text(
|
|
"ALTER TABLE sites ADD COLUMN is_recommended TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否推荐'"
|
|
))
|
|
db.session.commit()
|
|
print("[OK] 成功添加 is_recommended 字段")
|
|
|
|
except Exception as e:
|
|
db.session.rollback()
|
|
print(f"[ERROR] 迁移失败: {str(e)}")
|
|
sys.exit(1)
|
|
|
|
def downgrade():
|
|
"""删除is_recommended字段"""
|
|
app = create_app(os.getenv('FLASK_ENV', 'development'))
|
|
|
|
with app.app_context():
|
|
try:
|
|
# 删除字段
|
|
print("开始删除 is_recommended 字段...")
|
|
db.session.execute(db.text(
|
|
"ALTER TABLE sites DROP COLUMN is_recommended"
|
|
))
|
|
db.session.commit()
|
|
print("✓ 成功删除 is_recommended 字段")
|
|
|
|
except Exception as e:
|
|
db.session.rollback()
|
|
print(f"✗ 回滚失败: {str(e)}")
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='数据库迁移: 添加is_recommended字段')
|
|
parser.add_argument('--downgrade', action='store_true', help='回滚迁移')
|
|
args = parser.parse_args()
|
|
|
|
if args.downgrade:
|
|
downgrade()
|
|
else:
|
|
upgrade()
|