Files
video-gen/video-gen-api/alembic/versions/baf54bec4cb5_数据库修改.py
T
2026-06-02 14:28:26 +08:00

117 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""数据库修改
Revision ID: baf54bec4cb5
Revises: 6cf2bcc8915f
Create Date: 2026-05-28 13:40:31.609405
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'baf54bec4cb5'
down_revision: Union[str, None] = '6cf2bcc8915f'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
TABLE_NAME = "credit_ratios"
def _has_index(table_name: str, index_name: str) -> bool:
bind = op.get_bind()
inspector = sa.inspect(bind)
indexes = inspector.get_indexes(table_name)
return any(index.get("name") == index_name for index in indexes)
def _has_foreign_key(table_name: str, fk_name: str) -> bool:
bind = op.get_bind()
inspector = sa.inspect(bind)
foreign_keys = inspector.get_foreign_keys(table_name)
return any(fk.get("name") == fk_name for fk in foreign_keys)
def _create_index_if_not_exists(
index_name: str,
table_name: str,
columns: list[str],
unique: bool = False,
) -> None:
if not _has_index(table_name, index_name):
op.create_index(index_name, table_name, columns, unique=unique)
def _drop_index_if_exists(index_name: str, table_name: str) -> None:
if _has_index(table_name, index_name):
op.drop_index(index_name, table_name=table_name)
def upgrade() -> None:
# 索引存在才不重复创建,避免 DuplicateTable
_create_index_if_not_exists(
"ix_credit_ratios_gen_type",
TABLE_NAME,
["gen_type"],
unique=False,
)
_create_index_if_not_exists(
"ix_credit_ratios_gen_type_engine_resolution",
TABLE_NAME,
["gen_type", "model_config_id", "resolution"],
unique=False,
)
_create_index_if_not_exists(
"ix_credit_ratios_gen_type_resolution",
TABLE_NAME,
["gen_type", "resolution"],
unique=False,
)
_create_index_if_not_exists(
"ix_credit_ratios_model_config_id",
TABLE_NAME,
["model_config_id"],
unique=False,
)
_create_index_if_not_exists(
"ix_credit_ratios_resolution",
TABLE_NAME,
["resolution"],
unique=False,
)
# 外键存在才删除,避免 UndefinedObject
if _has_foreign_key(TABLE_NAME, "credit_ratios_model_config_id_fkey"):
op.drop_constraint(
"credit_ratios_model_config_id_fkey",
TABLE_NAME,
type_="foreignkey",
)
def downgrade() -> None:
# 注意:
# 如果 model_config_id 已经改成 ImageEngine / VideoEngine 的 id
# 恢复到 model_configs 外键可能因为历史数据不匹配而失败。
# 当前业务是删除外键,所以 downgrade 这里只做尽量安全处理。
if not _has_foreign_key(TABLE_NAME, "credit_ratios_model_config_id_fkey"):
op.create_foreign_key(
"credit_ratios_model_config_id_fkey",
TABLE_NAME,
"model_configs",
["model_config_id"],
["id"],
)
_drop_index_if_exists("ix_credit_ratios_resolution", TABLE_NAME)
_drop_index_if_exists("ix_credit_ratios_model_config_id", TABLE_NAME)
_drop_index_if_exists("ix_credit_ratios_gen_type_resolution", TABLE_NAME)
_drop_index_if_exists("ix_credit_ratios_gen_type_engine_resolution", TABLE_NAME)
_drop_index_if_exists("ix_credit_ratios_gen_type", TABLE_NAME)