Files
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

116 lines
4.0 KiB
Python

#!/usr/bin/env python3
"""迁移 home_modules 表中的图片路径"""
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from sqlalchemy import create_engine, text
from app.config import get_settings
settings = get_settings()
engine = create_engine(settings.DATABASE_URL.replace('+aiosqlite', ''), echo=False)
def update_banner_paths():
"""更新 banner 模块中的图片路径"""
with engine.connect() as conn:
result = conn.execute(text('SELECT id, code, content FROM home_modules WHERE code = "banner"'))
row = result.fetchone()
if not row:
print("未找到 banner 模块")
return
module_id = row[0]
code = row[1]
content = json.loads(row[2]) if row[2] else {}
slides = content.get('slides', [])
updated = False
for slide in slides:
old_image = slide.get('image', '')
if old_image.startswith('/uploads/'):
# 转换路径
new_image = old_image.replace('/uploads/', '/storage/admin/images/')
slide['image'] = new_image
print(f" 更新: {old_image} -> {new_image}")
updated = True
if updated:
new_content = json.dumps(content, ensure_ascii=False)
conn.execute(
text('UPDATE home_modules SET content = :content WHERE id = :id'),
{'content': new_content, 'id': module_id}
)
conn.commit()
print(f"\n✅ banner 模块已更新")
else:
print("✅ banner 模块无需更新")
def update_features_paths():
"""更新 features 模块中的图片路径"""
with engine.connect() as conn:
result = conn.execute(text('SELECT id, code, content FROM home_modules WHERE code = "features"'))
row = result.fetchone()
if not row:
print("未找到 features 模块")
return
module_id = row[0]
content = json.loads(row[2]) if row[2] else {}
items = content.get('items', [])
updated = False
for item in items:
# 更新 icon 字段
old_icon = item.get('icon', '')
if old_icon.startswith('/uploads/') or old_icon.startswith('/images/'):
if old_icon.startswith('/uploads/'):
new_icon = old_icon.replace('/uploads/', '/storage/admin/images/')
else:
new_icon = old_icon.replace('/images/', '/storage/admin/images/')
item['icon'] = new_icon
print(f" 更新 icon: {old_icon} -> {new_icon}")
updated = True
# 更新 media_url 字段
old_media = item.get('media_url', '')
if old_media.startswith('/uploads/') or old_media.startswith('/images/'):
if old_media.startswith('/uploads/'):
new_media = old_media.replace('/uploads/', '/storage/admin/images/')
else:
new_media = old_media.replace('/images/', '/storage/admin/images/')
item['media_url'] = new_media
print(f" 更新 media_url: {old_media} -> {new_media}")
updated = True
if updated:
new_content = json.dumps(content, ensure_ascii=False)
conn.execute(
text('UPDATE home_modules SET content = :content WHERE id = :id'),
{'content': new_content, 'id': module_id}
)
conn.commit()
print(f"\n✅ features 模块已更新")
else:
print("✅ features 模块无需更新")
if __name__ == "__main__":
print("=" * 60)
print("迁移 home_modules 图片路径")
print("=" * 60)
update_banner_paths()
update_features_paths()
print("\n" + "=" * 60)
print("迁移完成")
print("=" * 60)