mirror of
https://github.com/Cccc-owo/CheckInApp.git
synced 2026-06-17 14:06:28 +00:00
refactor: v2
backend & frontend
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
数据库迁移脚本:为 task_templates 表添加 parent_id 字段
|
||||
|
||||
运行方法:
|
||||
python backend/scripts/migrate_add_parent_id_to_templates.py
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# 设置 UTF-8 编码输出(Windows 兼容)
|
||||
if sys.platform == "win32":
|
||||
import io
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
||||
|
||||
# 添加项目根目录到 Python 路径
|
||||
project_root = Path(__file__).parent.parent.parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from sqlalchemy import text
|
||||
from backend.models.database import engine, SessionLocal
|
||||
|
||||
|
||||
def migrate():
|
||||
"""为 task_templates 表添加 parent_id 字段"""
|
||||
print("=" * 60)
|
||||
print("开始数据库迁移:添加 parent_id 字段到 task_templates 表")
|
||||
print("=" * 60)
|
||||
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
# 检查字段是否已存在
|
||||
result = db.execute(text(
|
||||
"SELECT COUNT(*) FROM pragma_table_info('task_templates') WHERE name='parent_id'"
|
||||
))
|
||||
field_exists = result.fetchone()[0] > 0
|
||||
|
||||
if field_exists:
|
||||
print("⚠️ parent_id 字段已存在,跳过迁移")
|
||||
return
|
||||
|
||||
# 添加 parent_id 字段
|
||||
print("📝 正在添加 parent_id 字段...")
|
||||
db.execute(text(
|
||||
"ALTER TABLE task_templates ADD COLUMN parent_id INTEGER"
|
||||
))
|
||||
db.commit()
|
||||
print("✅ parent_id 字段添加成功")
|
||||
|
||||
# 创建外键约束(SQLite 不支持直接添加外键,需要重建表)
|
||||
print("\n📝 注意:SQLite 不支持直接添加外键约束")
|
||||
print(" 如需外键约束,请重建表或在下次完整迁移时处理")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("✅ 数据库迁移完成!")
|
||||
print("=" * 60)
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ 迁移失败: {str(e)}")
|
||||
db.rollback()
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
migrate()
|
||||
Reference in New Issue
Block a user