fix(database): use logger as log output

Co-Authored-By: Aqr-K <95741669+Aqr-K@users.noreply.github.com>
This commit is contained in:
DDSRem
2025-08-23 18:36:11 +08:00
co-authored by Aqr-K
parent cb1dd9f17d
commit 2766e80346
3 changed files with 16 additions and 14 deletions
+10 -9
View File
@@ -8,6 +8,7 @@ Create Date: 2025-08-19 12:27:08.451371
import sqlalchemy as sa import sqlalchemy as sa
from alembic import op from alembic import op
from app.log import logger
from app.core.config import settings from app.core.config import settings
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
@@ -41,7 +42,7 @@ def fix_postgresql_sequences():
""")) """))
tables = [row[0] for row in result.fetchall()] tables = [row[0] for row in result.fetchall()]
print(f"发现 {len(tables)} 个表需要检查序列") logger.info(f"发现 {len(tables)} 个表需要检查序列")
for table_name in tables: for table_name in tables:
fix_table_sequence(connection, table_name) fix_table_sequence(connection, table_name)
@@ -54,7 +55,7 @@ def fix_table_sequence(connection, table_name):
try: try:
# 跳过alembic_version表,它没有id列 # 跳过alembic_version表,它没有id列
if table_name == 'alembic_version': if table_name == 'alembic_version':
print(f"跳过表 {table_name},这是Alembic版本表") logger.debug(f"跳过表 {table_name},这是Alembic版本表")
return return
# 检查表是否有id列 # 检查表是否有id列
@@ -67,22 +68,22 @@ def fix_table_sequence(connection, table_name):
id_column = result.fetchone() id_column = result.fetchone()
if not id_column: if not id_column:
print(f"{table_name} 没有id列,跳过") logger.debug(f"{table_name} 没有id列,跳过")
return return
is_identity, column_default = id_column is_identity, column_default = id_column
# 检查是否已经是Identity类型 # 检查是否已经是Identity类型
if is_identity == 'YES' or (column_default and 'GENERATED BY DEFAULT AS IDENTITY' in column_default): if is_identity == 'YES' or (column_default and 'GENERATED BY DEFAULT AS IDENTITY' in column_default):
print(f"{table_name} 的id列已经是Identity类型,跳过") logger.debug(f"{table_name} 的id列已经是Identity类型,跳过")
return return
# 检查是否有序列 # 检查是否有序列
print(f"{table_name} 存在序列,需要修复") logger.info(f"{table_name} 存在序列,需要修复")
convert_to_identity(connection, table_name) convert_to_identity(connection, table_name)
except Exception as e: except Exception as e:
print(f"修复表 {table_name} 序列时出错: {e}") logger.error(f"修复表 {table_name} 序列时出错: {e}")
# 回滚当前事务,避免影响后续操作 # 回滚当前事务,避免影响后续操作
connection.rollback() connection.rollback()
@@ -106,12 +107,12 @@ def convert_to_identity(connection, table_name):
ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (START WITH {next_value}) ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (START WITH {next_value})
""")) """))
print(f"{table_name} 序列已转换为Identity,起始值为 {next_value}") logger.info(f"{table_name} 序列已转换为Identity,起始值为 {next_value}")
except Exception as e: except Exception as e:
print(f"转换表 {table_name} 序列时出错: {e}")
# 如果是已经存在的Identity错误,则忽略 # 如果是已经存在的Identity错误,则忽略
if "already an identity column" in str(e): if "already an identity column" in str(e):
print(f"{table_name} 的id列已经是Identity类型,忽略此错误") logger.warn(f"{table_name} 的id列已经是Identity类型,忽略此错误: {e}")
return return
logger.error(f"转换表 {table_name} 序列时出错: {e}")
raise raise
+2 -1
View File
@@ -10,6 +10,7 @@ import contextlib
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from app.log import logger
from app.db import SessionFactory from app.db import SessionFactory
from app.db.models import UserConfig from app.db.models import UserConfig
@@ -69,7 +70,7 @@ def upgrade() -> None:
existing_type=sa.String(), existing_type=sa.String(),
type_=sa.JSON()) type_=sa.JSON())
except Exception as e: except Exception as e:
print(f"Could not alter column {column_name} in table {table}: {e}") logger.error(f"Could not alter column {column_name} in table {table}: {e}")
with SessionFactory() as db: with SessionFactory() as db:
UserConfig.truncate(db) UserConfig.truncate(db)
+4 -4
View File
@@ -10,6 +10,8 @@ import contextlib
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from app.log import logger
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = 'ecf3c693fdf3' revision = 'ecf3c693fdf3'
@@ -22,9 +24,9 @@ def upgrade() -> None:
conn = op.get_bind() conn = op.get_bind()
inspector = sa.inspect(conn) inspector = sa.inspect(conn)
table_name = 'subscribehistory' table_name = 'subscribehistory'
columns = inspector.get_columns(table_name)
try: try:
columns = inspector.get_columns(table_name)
sites_col = next((c for c in columns if c['name'] == 'sites'), None) sites_col = next((c for c in columns if c['name'] == 'sites'), None)
# 如果 'sites' 列存在且类型不是 JSON,则进行修改 # 如果 'sites' 列存在且类型不是 JSON,则进行修改
if sites_col and not isinstance(sites_col['type'], sa.JSON): if sites_col and not isinstance(sites_col['type'], sa.JSON):
@@ -38,9 +40,7 @@ def upgrade() -> None:
existing_type=sa.String(), existing_type=sa.String(),
type_=sa.JSON()) type_=sa.JSON())
except Exception as e: except Exception as e:
print(f"Could not alter column 'sites' in table {table_name}: {e}") logger.error(f"Could not alter column 'sites' in table {table_name}: {e}")
columns = inspector.get_columns(table_name)
if not any(c['name'] == 'custom_words' for c in columns): if not any(c['name'] == 'custom_words' for c in columns):
op.add_column(table_name, sa.Column('custom_words', sa.String(), nullable=True)) op.add_column(table_name, sa.Column('custom_words', sa.String(), nullable=True))