删除无效字段防止报错
This commit is contained in:
@@ -366,12 +366,12 @@ def initialize_database():
|
||||
# 检查字段
|
||||
cursor = db.execute_sql(f"PRAGMA table_info('{table_name}')")
|
||||
existing_columns = {row[1] for row in cursor.fetchall()}
|
||||
model_fields = model._meta.fields
|
||||
|
||||
for field_name, field_obj in model_fields.items():
|
||||
model_fields = set(model._meta.fields.keys())
|
||||
|
||||
# 检查并添加缺失字段(原有逻辑)
|
||||
for field_name, field_obj in model._meta.fields.items():
|
||||
if field_name not in existing_columns:
|
||||
logger.info(f"表 '{table_name}' 缺失字段 '{field_name}',正在添加...")
|
||||
# 获取字段类型
|
||||
field_type = field_obj.__class__.__name__
|
||||
sql_type = {
|
||||
'TextField': 'TEXT',
|
||||
@@ -381,8 +381,6 @@ def initialize_database():
|
||||
'BooleanField': 'INTEGER',
|
||||
'DateTimeField': 'DATETIME'
|
||||
}.get(field_type, 'TEXT')
|
||||
|
||||
# 构建 ALTER TABLE 语句
|
||||
alter_sql = f'ALTER TABLE {table_name} ADD COLUMN {field_name} {sql_type}'
|
||||
if field_obj.null:
|
||||
alter_sql += ' NULL'
|
||||
@@ -390,9 +388,18 @@ def initialize_database():
|
||||
alter_sql += ' NOT NULL'
|
||||
if hasattr(field_obj, 'default') and field_obj.default is not None:
|
||||
alter_sql += f' DEFAULT {field_obj.default}'
|
||||
|
||||
db.execute_sql(alter_sql)
|
||||
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:
|
||||
logger.exception(f"检查表或字段是否存在时出错: {e}")
|
||||
# 如果检查失败(例如数据库不可用),则退出
|
||||
|
||||
Reference in New Issue
Block a user