在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用db-migration
星标9
分支1
更新时间2026年2月28日 16:31
为本项目添加新数据库模型或修改现有模型,并使用 Alembic 生成和运行数据库迁移脚本。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
为本项目添加新数据库模型或修改现有模型,并使用 Alembic 生成和运行数据库迁移脚本。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | db-migration |
| description | 为本项目添加新数据库模型或修改现有模型,并使用 Alembic 生成和运行数据库迁移脚本。 |
backend/app/models/backend/alembic/versions/backend/app/models/ 创建模型文件# backend/app/models/resource.py
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, Boolean
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.db.base_class import Base
class Resource(Base):
__tablename__ = "resources"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(255), nullable=False, index=True)
description = Column(Text, nullable=True)
is_active = Column(Boolean, default=True, nullable=False)
# 外键关联示例
project_id = Column(Integer, ForeignKey("projects.id", ondelete="CASCADE"), nullable=True)
owner_id = Column(Integer, ForeignKey("users.id"), nullable=False)
# 时间戳 (自动管理)
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
updated_at = Column(DateTime(timezone=True), onupdate=func.now(), nullable=True)
# 关系
project = relationship("Project", back_populates="resources")
owner = relationship("User", back_populates="resources")
backend/app/models/__init__.py 注册模型from app.models.resource import Resource
env.py 中被导入检查 backend/alembic/env.py 中是否已导入新的模型,确保 Alembic 能检测到变更。
cd backend
# 自动生成迁移 (基于模型变更)
uv run alembic revision --autogenerate -m "add_resource_table"
# 生成空白迁移 (手动编写)
uv run alembic revision -m "custom_migration"
生成后必须检查 backend/alembic/versions/ 中的新文件:
# 典型的迁移文件结构
def upgrade() -> None:
op.create_table(
'resources',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=255), nullable=False),
# ...
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_resources_id'), 'resources', ['id'], unique=False)
op.create_index(op.f('ix_resources_name'), 'resources', ['name'], unique=False)
def downgrade() -> None:
op.drop_index(op.f('ix_resources_name'), table_name='resources')
op.drop_index(op.f('ix_resources_id'), table_name='resources')
op.drop_table('resources')
cd backend
# 升级到最新
uv run alembic upgrade head
# 降级一个版本
uv run alembic downgrade -1
# 查看当前版本
uv run alembic current
# 查看迁移历史
uv run alembic history --verbose
修改现有列时,生成的迁移可能不完整,需手动补全:
# 常用操作
op.add_column('table_name', sa.Column('new_col', sa.String(100)))
op.drop_column('table_name', 'old_col')
op.alter_column('table_name', 'col_name', type_=sa.String(500))
op.create_foreign_key('fk_name', 'from_table', 'to_table', ['fk_col'], ['id'])
-m "add_email_to_users" 而非 -m "update"upgrade() 和 downgrade() 都要实现fk_{from}_{to}_{col}index=True本地启动、调试和排查本项目问题。包括启动后端、前端、Celery Worker,以及常见错误的排查方法。
在本项目中创建标准的 FastAPI API 端点,包含 schema、service、router 注册,遵循项目现有架构模式。
为本项目的 UI 自动化测试平台创建测试步骤和测试用例,理解平台内部的测试步骤数据结构、Runner 执行逻辑和 Playwright 操作类型。
在本项目中创建标准的 Vue 3 + TypeScript 组件,使用 Naive UI 组件库、Pinia 状态管理,遵循项目现有架构模式。