添加数据库的数据增加和查询功能

This commit is contained in:
997146918 2025-07-04 11:12:24 +08:00
parent ad74a7ca7d
commit 590970b0b3
2 changed files with 83 additions and 21 deletions

View File

@ -13,11 +13,11 @@ class DatabaseHandle:
conn.execute(''' conn.execute('''
CREATE TABLE IF NOT EXISTS characters CREATE TABLE IF NOT EXISTS characters
(id INTEGER PRIMARY KEY, (id INTEGER PRIMARY KEY,
name TEXT not NULL, name TEXT not NULL UNIQUE,
age INTEGER, age INTEGER,
personality TEXT, personality TEXT,
profession TEXT, profession TEXT,
characterBackgrount TEXT, characterBackground TEXT,
chat_style TEXT chat_style TEXT
) )
''') ''')
@ -45,20 +45,70 @@ class DatabaseHandle:
def add_character(self, data:dict): def add_character(self, data:dict):
"""添加角色数据""" """添加角色数据"""
pass with self._get_connection() as conn:
cursor = conn.cursor()
cursor.execute('''
INSERT INTO characters (
name, age, personality, profession, characterBackground,
chat_style
) VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT(name) DO NOTHING
''', (
data["name"], data["age"], data["personality"],
data["profession"], data["characterBackground"],
data["chat_style"]
))
conn.commit()
return cursor.lastrowid
def get_character_byname(self, name:str) ->list:
"""
根据角色名称查询数据name为空时返回全部数据
:param name: 角色名称精确匹配None 或空字符串时返回全部
:return: 角色数据字典列表
"""
with self._get_connection() as conn:
cursor = conn.cursor()
# 动态构建SQL语句
sql = "SELECT * FROM characters"
params = ()
if name: # 当name非空时添加条件
sql += " WHERE name = ?"
params = (name,)
cursor.execute(sql, params)
# 转换结果为字典列表
columns = [col[0] for col in cursor.description]
return [dict(zip(columns, row)) for row in cursor.fetchall()]
# def add_employee(self, data: dict): def add_chat(self, data:dict):
# """插入员工数据""" """添加聊天数据"""
# with self._get_connection() as conn: with self._get_connection() as conn:
# cursor = conn.cursor() cursor = conn.cursor()
# cursor.execute(''' cursor.execute('''
# INSERT INTO employees ( INSERT INTO chat_records (
# name, age, personality, profession, background, character_ids, chat
# conversation_scene, language_style ) VALUES (?, ?)
# ) VALUES (?, ?, ?, ?, ?, ?, ?) ''', (
# ''', ( data["character_ids"], data["chat"]
# data["姓名"], data["年龄"], data["性格"], ))
# data["职业"], data["背景"], conn.commit()
# data["对话场景"], data["语言风格"] return cursor.lastrowid
# ))
# return cursor.lastrowid # 返回插入ID def get_chats_by_character_id(self, character_id: int) -> list:
"""
根据角色ID查询聊天记录target_id为空时返回全部数据
:param target_id: 目标角色IDNone时返回全部记录
:return: 聊天记录字典列表
"""
with self._get_connection() as conn:
cursor = conn.cursor()
sql = "SELECT * FROM chat_records WHERE ',' || character_ids || ',' LIKE '%,' || ? || ',%'"
params = (str(character_id))
cursor.execute(sql, params)
# 转换结果为字典列表
columns = [col[0] for col in cursor.description]
return [dict(zip(columns, row)) for row in cursor.fetchall()]

View File

@ -237,10 +237,22 @@ if __name__ == "__main__":
server_thread.daemon = True # 设为守护线程(主程序退出时自动终止) server_thread.daemon = True # 设为守护线程(主程序退出时自动终止)
server_thread.start() server_thread.start()
# Test
aicore.getPromptToken("测试功能")
database = DatabaseHandle()
#Test database
database = DatabaseHandle()
id = database.add_character({"name":"张三","age":35,"personality":"成熟稳重/惜字如金","profession":"阿里巴巴算法工程师"
,"characterBackground":"浙大计算机系毕业专注AI优化项目","chat_style":"请在对话中表现出专业、冷静、惜字如金。用口语化的方式简短回答"})
id = database.add_character({"name":"李明","age":30,"personality":"活泼健谈","profession":"产品经理"
,"characterBackground":"公司资深产品经理","chat_style":"热情"})
characters = database.get_character_byname("")
#chat_id = database.add_chat({"character_ids":"1,2","chat":"张三:[第一轮发言] 李明:[第一轮回应] 张三:[第二轮发言] 李明:[第二轮回应"})
chat = database.get_chats_by_character_id(3)
if id == 0:
logger.log(logging.ERROR, f"角色 张三已经添加到数据库")
# Test AI
aicore.getPromptToken("测试功能")
asyncio.run( asyncio.run(
generateAIChat(promptStr = f""" generateAIChat(promptStr = f"""
#你是一个游戏NPC对话生成器。请严格按以下要求生成两个角色的日常对话 #你是一个游戏NPC对话生成器。请严格按以下要求生成两个角色的日常对话