import sqlite3 import os import shutil # 定义全局常量 DATABASE_PATH = r'/User/users.db' AVATAR_DIRECTORY = r'D:\STUDY\Project\jizhouyao\User\avatar' AVATAR_SOURCE_DIRECTORY = r'D:\STUDY\Project\jizhouyao\User\avatar-source' AVATAR_TMP_DIRECTORY = 'avatar' # 确保目录存在 os.makedirs(AVATAR_DIRECTORY, exist_ok=True) os.makedirs(AVATAR_SOURCE_DIRECTORY, exist_ok=True) def connect_database(): """连接 SQLite 数据库""" return sqlite3.connect(DATABASE_PATH) def create_tables(cursor): """创建必要的数据库表""" # 创建 users 表 cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, avatar TEXT -- 存储头像文件路径 ) ''') print("表 'users' 确保已存在!") # 添加 avatar 字段(如果需要) try: cursor.execute("ALTER TABLE users ADD COLUMN avatar TEXT") print("字段 'avatar' 已添加到 users 表!") except sqlite3.OperationalError: print("字段 'avatar' 已存在,无需重复添加!") # 创建 ceramic_detection_record 表 cursor.execute(''' CREATE TABLE IF NOT EXISTS ceramic_detection_record ( id INTEGER PRIMARY KEY AUTOINCREMENT, nickname TEXT NOT NULL, -- 用户昵称 detection_time TEXT NOT NULL, -- 检测时间 (ISO 格式) result TEXT NOT NULL, -- 检测结果 confidence TEXT NOT NULL -- 置信度 ) ''') print("表 'ceramic_detection_record' 确保已存在!") # 创建 ai_chat_record 表 cursor.execute(''' CREATE TABLE IF NOT EXISTS ai_chat_record ( id INTEGER PRIMARY KEY AUTOINCREMENT, nickname TEXT NOT NULL, -- 用户昵称 chat_time TEXT NOT NULL, -- 聊天时间 (ISO 格式) chat_title TEXT NOT NULL, -- 聊天标题 chat_content TEXT NOT NULL -- 聊天内容(Markdown 格式) ) ''') print("表 'ai_chat_record' 确保已存在!") def save_avatar(username, avatar_source_path): """保存用户头像文件""" # 确定目标路径 avatar_destination_path = os.path.join(AVATAR_TMP_DIRECTORY, f'{username}_avatar.jpg') avatar_destination_path = avatar_destination_path.replace('\\', '/') # 转换路径格式 avatar_source_path = avatar_source_path.replace('\\', '/') # 转换路径格式 try: # 复制头像到目标文件夹 shutil.copy(avatar_source_path, avatar_destination_path) print(f"头像文件已保存到: {avatar_destination_path}") return avatar_destination_path except FileNotFoundError: print(f"源头像文件 '{avatar_source_path}' 不存在!") raise def insert_user(cursor, username, password, avatar_path): """插入用户数据到 users 表""" try: cursor.execute( "INSERT INTO users (username, password, avatar) VALUES (?, ?, ?)", (username, password, avatar_path) ) print(f"用户 '{username}' 及其头像已保存到数据库!") except sqlite3.IntegrityError: print(f"用户 '{username}' 已存在,无需重复创建!") def query_and_display_users(cursor): """查询并显示所有用户信息""" cursor.execute("SELECT id, username, password, avatar FROM users") users = cursor.fetchall() print("当前用户信息:") for user in users: print(user) def main(): """主程序逻辑""" # 数据库连接 conn = connect_database() cursor = conn.cursor() # 创建数据库表 create_tables(cursor) # 用户信息 username = 'pqyyyyy' password = '031009' avatar_source_path = os.path.join(AVATAR_SOURCE_DIRECTORY, 'example-avatar.jpg') # 示例头像文件路径 try: # 保存用户头像文件 avatar_path = save_avatar(username, avatar_source_path) # 插入用户数据 insert_user(cursor, username, password, avatar_path) # 提交更改 conn.commit() except Exception as e: print(f"发生错误:{e}") finally: # 查询并显示用户信息 query_and_display_users(cursor) # 关闭数据库连接 conn.close() if __name__ == "__main__": main()