import pymysql.cursors import tkinter as tk from tkinter import filedialog,messagebox import os # 数据库连接参数 DB_HOST = 'localhost' # 数据库主机 DB_USER = 'root' # 数据库用户名 DB_PASSWORD = '123456' # 数据库密码 DB_NAME = 'file' # 数据库名 # 创建表的SQL语句 CREATE_TABLE_SQL = """ CREATE TABLE IF NOT EXISTS images ( id INT AUTO_INCREMENT PRIMARY KEY, filename VARCHAR(255), content LONGBLOB, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); """ def create_table(): connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME) try: with connection.cursor() as cursor: cursor.execute(CREATE_TABLE_SQL) connection.commit() finally: connection.close() def path_to_bytes(): return filedialog.askopenfilename(filetypes=(("Image Files", "*.jpg;*.png;*.gif"), ("All Files", "*.*"))) def upload_image(): # 创建数据库表 create_table() # 选择要上传的图像文件 selected_image_path = path_to_bytes() if selected_image_path: with open(selected_image_path, 'rb') as image_file: image_content = image_file.read() connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME) try: with connection.cursor() as cursor: sql = "INSERT INTO images (filename, content) VALUES (%s, %s)" cursor.execute(sql, (os.path.basename(selected_image_path), pymysql.Binary(image_content))) connection.commit() messagebox.showinfo("上传成功", f"图片路径: '{selected_image_path}' 上传成功.") except Exception as e: messagebox.showerror("上传错误", f"图片上传失败: {e}") finally: connection.close() def delete_image(): view_all_images_info() # 获取用户输入的图像ID image_id = tk.simpledialog.askinteger("删除图片", "请输入需要删除的图像ID:") if image_id is not None: connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME) try: with connection.cursor() as cursor: # 直接执行删除操作 cursor.execute("DELETE FROM images WHERE id = %s", (image_id,)) connection.commit() # 提示用户确认删除 confirmation = tk.messagebox.askyesno("Confirm Delete", f"是否删除图片ID为 {image_id}的图片?") if confirmation: messagebox.showinfo("删除成功", f"成功删除图片ID为 {image_id} 的图片.") else: messagebox.showinfo("操作取消", "图片删除操作已取消。") except Exception as e: messagebox.showerror("删除错误", f"图片删除失败: {e}") finally: connection.close() def download_image(): view_all_images_info() # 获取用户输入的图像ID image_id = tk.simpledialog.askinteger("下载图片", "请输入需要下载的图像ID:") if image_id is not None: connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME) try: with connection.cursor() as cursor: # 查询图像内容和文件名 cursor.execute("SELECT content, filename FROM images WHERE id = %s", (image_id,)) image_data = cursor.fetchone() if image_data: content, original_filename = image_data # 构建默认的保存文件名 default_filename = os.path.splitext(original_filename)[0] + ".jpg" # 使用默认扩展名并允许用户选择保存位置 save_path = filedialog.asksaveasfilename(initialfile=default_filename, defaultextension=".jpg", filetypes=[("JPEG Images", "*.jpg"), ("All Files", "*.*")]) if save_path: try: with open(save_path, 'wb') as image_file: image_file.write(content) messagebox.showinfo("成功", f"图片已成功下载到 '{save_path}'。") except IOError as e: messagebox.showerror("错误", f"写入文件时出错: {e}") else: messagebox.showinfo("取消", "下载已取消。") else: messagebox.showinfo("未找到", f"未找到ID为 {image_id} 的图片。") except Exception as e: messagebox.showerror("下载错误", f"下载图片时发生错误: {e}") finally: connection.close() def view_all_images_info(): connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME) try: with connection.cursor() as cursor: # 查询所有图片信息 cursor.execute("SELECT id, filename FROM images") image_data = cursor.fetchall() if image_data: # 构建信息消息 message = "全部图片信息:\n\n" for row in image_data: message += f"Image ID: {row[0]}\nImage Name: {row[1]}\n---\n" messagebox.showinfo("所有图片信息", message) else: messagebox.showinfo("未找到图片", "数据库中没有图片信息。") except Exception as e: messagebox.showerror("查询错误", f"Error fetching image info: {e}") finally: connection.close()