删除无效字段防止报错

This commit is contained in:
SengokuCola
2025-06-03 20:33:40 +08:00
parent 12f9ef0527
commit 615685791f

View File

@@ -366,12 +366,12 @@ def initialize_database():
# 检查字段 # 检查字段
cursor = db.execute_sql(f"PRAGMA table_info('{table_name}')") cursor = db.execute_sql(f"PRAGMA table_info('{table_name}')")
existing_columns = {row[1] for row in cursor.fetchall()} existing_columns = {row[1] for row in cursor.fetchall()}
model_fields = model._meta.fields model_fields = set(model._meta.fields.keys())
for field_name, field_obj in model_fields.items(): # 检查并添加缺失字段(原有逻辑)
for field_name, field_obj in model._meta.fields.items():
if field_name not in existing_columns: if field_name not in existing_columns:
logger.info(f"'{table_name}' 缺失字段 '{field_name}',正在添加...") logger.info(f"'{table_name}' 缺失字段 '{field_name}',正在添加...")
# 获取字段类型
field_type = field_obj.__class__.__name__ field_type = field_obj.__class__.__name__
sql_type = { sql_type = {
'TextField': 'TEXT', 'TextField': 'TEXT',
@@ -381,8 +381,6 @@ def initialize_database():
'BooleanField': 'INTEGER', 'BooleanField': 'INTEGER',
'DateTimeField': 'DATETIME' 'DateTimeField': 'DATETIME'
}.get(field_type, 'TEXT') }.get(field_type, 'TEXT')
# 构建 ALTER TABLE 语句
alter_sql = f'ALTER TABLE {table_name} ADD COLUMN {field_name} {sql_type}' alter_sql = f'ALTER TABLE {table_name} ADD COLUMN {field_name} {sql_type}'
if field_obj.null: if field_obj.null:
alter_sql += ' NULL' alter_sql += ' NULL'
@@ -390,9 +388,18 @@ def initialize_database():
alter_sql += ' NOT NULL' alter_sql += ' NOT NULL'
if hasattr(field_obj, 'default') and field_obj.default is not None: if hasattr(field_obj, 'default') and field_obj.default is not None:
alter_sql += f' DEFAULT {field_obj.default}' alter_sql += f' DEFAULT {field_obj.default}'
db.execute_sql(alter_sql) db.execute_sql(alter_sql)
logger.info(f"字段 '{field_name}' 添加成功") logger.info(f"字段 '{field_name}' 添加成功")
# 检查并删除多余字段(新增逻辑)
extra_fields = existing_columns - model_fields
for field_name in extra_fields:
try:
logger.warning(f"'{table_name}' 存在多余字段 '{field_name}',正在尝试删除...")
db.execute_sql(f"ALTER TABLE {table_name} DROP COLUMN {field_name}")
logger.info(f"字段 '{field_name}' 删除成功")
except Exception as e:
logger.error(f"删除字段 '{field_name}' 失败: {e}")
except Exception as e: except Exception as e:
logger.exception(f"检查表或字段是否存在时出错: {e}") logger.exception(f"检查表或字段是否存在时出错: {e}")
# 如果检查失败(例如数据库不可用),则退出 # 如果检查失败(例如数据库不可用),则退出