mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-02-03 02:25:32 +08:00
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
"""2.0.3
|
||
|
||
Revision ID: e2dbe1421fa4
|
||
Revises: 0fb94bf69b38
|
||
Create Date: 2024-10-09 13:44:13.926529
|
||
|
||
"""
|
||
import contextlib
|
||
|
||
from alembic import op
|
||
import sqlalchemy as sa
|
||
|
||
from app.log import logger
|
||
from app.db import SessionFactory
|
||
from app.db.models import UserConfig
|
||
|
||
# revision identifiers, used by Alembic.
|
||
revision = 'e2dbe1421fa4'
|
||
down_revision = '0fb94bf69b38'
|
||
branch_labels = None
|
||
depends_on = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
conn = op.get_bind()
|
||
inspector = sa.inspect(conn)
|
||
|
||
# 检查并添加 downloadhistory.media_category
|
||
dh_columns = inspector.get_columns('downloadhistory')
|
||
if not any(c['name'] == 'media_category' for c in dh_columns):
|
||
op.add_column('downloadhistory', sa.Column('media_category', sa.String(), nullable=True))
|
||
|
||
# 检查并添加 subscribe 表的列
|
||
sub_columns = inspector.get_columns('subscribe')
|
||
if not any(c['name'] == 'custom_words' for c in sub_columns):
|
||
op.add_column('subscribe', sa.Column('custom_words', sa.String(), nullable=True))
|
||
if not any(c['name'] == 'media_category' for c in sub_columns):
|
||
op.add_column('subscribe', sa.Column('media_category', sa.String(), nullable=True))
|
||
if not any(c['name'] == 'filter_groups' for c in sub_columns):
|
||
op.add_column('subscribe', sa.Column('filter_groups', sa.JSON(), nullable=True))
|
||
|
||
# 定义需要检查和转换的表和列
|
||
columns_to_alter = {
|
||
'subscribe': 'note',
|
||
'downloadhistory': 'note',
|
||
'mediaserveritem': 'note',
|
||
'message': 'note',
|
||
'plugindata': 'value',
|
||
'site': 'note',
|
||
'sitestatistic': 'note',
|
||
'systemconfig': 'value',
|
||
'userconfig': 'value'
|
||
}
|
||
|
||
for table, column_name in columns_to_alter.items():
|
||
try:
|
||
cols = inspector.get_columns(table)
|
||
# 找到对应的列信息
|
||
target_col = next((c for c in cols if c['name'] == column_name), None)
|
||
# 如果列存在且类型不是JSON,则进行修改
|
||
if target_col and not isinstance(target_col['type'], sa.JSON):
|
||
# PostgreSQL需要指定USING子句来处理类型转换
|
||
if conn.dialect.name == 'postgresql':
|
||
op.alter_column(table, column_name,
|
||
existing_type=sa.String(),
|
||
type_=sa.JSON(),
|
||
postgresql_using=f'"{column_name}"::json')
|
||
else:
|
||
op.alter_column(table, column_name,
|
||
existing_type=sa.String(),
|
||
type_=sa.JSON())
|
||
except Exception as e:
|
||
logger.error(f"Could not alter column {column_name} in table {table}: {e}")
|
||
|
||
with SessionFactory() as db:
|
||
UserConfig.truncate(db)
|
||
|
||
|
||
def downgrade() -> None:
|
||
pass
|