123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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()
|