fix alembic migration
This commit is contained in:
34
api/alembic/script_helpers.py
Normal file
34
api/alembic/script_helpers.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""Alembic 迁移共享工具(仅用于 versions/ 下的迁移脚本)。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
|
||||
def table_exists(table_name: str) -> bool:
|
||||
bind = op.get_bind()
|
||||
return table_name in sa.inspect(bind).get_table_names()
|
||||
|
||||
|
||||
def has_column(table_name: str, column_name: str) -> bool:
|
||||
if not table_exists(table_name):
|
||||
return False
|
||||
bind = op.get_bind()
|
||||
columns = sa.inspect(bind).get_columns(table_name)
|
||||
return any(column["name"] == column_name for column in columns)
|
||||
|
||||
|
||||
def add_column_if_missing(table_name: str, column: sa.Column) -> bool:
|
||||
"""若列不存在则 add_column;返回是否执行了添加。"""
|
||||
if has_column(table_name, column.name):
|
||||
return False
|
||||
op.add_column(table_name, column)
|
||||
return True
|
||||
|
||||
|
||||
def drop_column_if_exists(table_name: str, column_name: str) -> bool:
|
||||
if not has_column(table_name, column_name):
|
||||
return False
|
||||
op.drop_column(table_name, column_name)
|
||||
return True
|
||||
Reference in New Issue
Block a user