116 lines
4.0 KiB
Python
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)
|