fix:修改配置文件模型名,移除message_buffer

This commit is contained in:
SengokuCola
2025-06-03 13:41:30 +08:00
parent 691172766e
commit 0bea30c052
9 changed files with 57 additions and 392 deletions

View File

@@ -214,11 +214,10 @@ class PersonInfo(BaseModel):
platform = TextField() # 平台
user_id = TextField(index=True) # 用户ID
nickname = TextField() # 用户昵称
person_impression = TextField(null=True) # 个人印象
relationship_value = IntegerField(default=0) # 关系值
know_time = FloatField() # 认识时间 (时间戳)
msg_interval = IntegerField() # 消息间隔
# msg_interval_list: 存储为 JSON 字符串的列表
msg_interval_list = TextField(null=True)
class Meta:
# database = db # 继承自 BaseModel
@@ -334,7 +333,7 @@ def create_tables():
def initialize_database():
"""
检查所有定义的表是否存在,如果不存在则创建它们。
检查所有表的所有字段是否存在,如果缺失则警告用户并退出程序
检查所有表的所有字段是否存在,如果缺失则自动添加
"""
import sys
@@ -350,44 +349,56 @@ def initialize_database():
Knowledges,
ThinkingLog,
RecalledMessages,
GraphNodes, # 添加图节点表
GraphEdges, # 添加图边表
GraphNodes,
GraphEdges,
]
needs_creation = False
try:
with db: # 管理 table_exists 检查的连接
for model in models:
table_name = model._meta.table_name
if not db.table_exists(model):
logger.warning(f"'{table_name}' 未找到")
needs_creation = True
break # 一个表丢失,无需进一步检查。
if not needs_creation:
logger.warning(f"'{table_name}' 未找到,正在创建...")
db.create_tables([model])
logger.info(f"'{table_name}' 创建成功")
continue
# 检查字段
for model in models:
table_name = model._meta.table_name
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 in model_fields:
if field_name not in existing_columns:
logger.error(f"'{table_name}' 缺失字段 '{field_name}',请手动迁移数据库结构后重启程序。")
sys.exit(1)
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():
if field_name not in existing_columns:
logger.info(f"'{table_name}' 缺失字段 '{field_name}',正在添加...")
# 获取字段类型
field_type = field_obj.__class__.__name__
sql_type = {
'TextField': 'TEXT',
'IntegerField': 'INTEGER',
'FloatField': 'FLOAT',
'DoubleField': 'DOUBLE',
'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'
else:
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}' 添加成功")
except Exception as e:
logger.exception(f"检查表或字段是否存在时出错: {e}")
# 如果检查失败(例如数据库不可用),则退出
return
if needs_creation:
logger.info("正在初始化数据库:一个或多个表丢失。正在尝试创建所有定义的表...")
try:
create_tables() # 此函数有其自己的 'with db:' 上下文管理。
logger.info("数据库表创建过程完成。")
except Exception as e:
logger.exception(f"创建表期间出错: {e}")
else:
logger.info("所有数据库表及字段均已存在。")
logger.info("数据库初始化完成")
# 模块加载时调用初始化函数