You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.8 KiB

10 months ago
import pymysql.cursors
import tkinter as tk
from tkinter import filedialog
10 months ago
import os
10 months ago
# 数据库连接参数
DB_HOST = 'localhost' # 数据库主机
DB_USER = 'root' # 数据库用户名
DB_PASSWORD = '123456' # 数据库密码
DB_NAME = 'file' # 数据库名
10 months ago
10 months ago
# 创建表的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
);
"""
10 months ago
10 months ago
def create_table():
connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db=DB_NAME)
10 months ago
try:
10 months ago
with connection.cursor() as cursor:
cursor.execute(CREATE_TABLE_SQL)
connection.commit()
print("Table 'images' created successfully.")
finally:
connection.close()
def path_to_bytes():
return filedialog.askopenfilename(filetypes=(("Image Files", "*.jpg;*.png;*.gif"), ("All Files", "*.*")))
def upload_image():
selected_image_path = path_to_bytes()
if selected_image_path:
with open(selected_image_path, 'rb') as image_file:
image_content = image_file.read()
10 months ago
10 months ago
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()
print(f"Image '{selected_image_path}' uploaded successfully.")
finally:
connection.close()
10 months ago
10 months ago
def delete_image():
# 获取用户输入的图像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 * FROM images WHERE id = %s", (image_id,))
image_data = cursor.fetchone()
if image_data:
# 输出图像信息
print(f"Image Details:")
for index, value in enumerate(image_data):
column_name = cursor.description[index][0]
print(f"{column_name}: {value}")
# 提示用户确认删除
confirmation = tk.messagebox.askyesno("Confirm Delete", f"是否删除图片ID为 {image_id}的图片?")
if confirmation:
# 执行删除操作
sql = "DELETE FROM images WHERE id = %s"
cursor.execute(sql, (image_id,))
connection.commit()
print(f"成功删除图片ID为 {image_id} 的图片.")
else:
print(f"没有发现图片ID为 {image_id}的图片.")
except Exception as e:
print(f"Error deleting image: {e}")
finally:
connection.close()
10 months ago
10 months ago
def download_image():
# 获取用户输入的图像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)
print(f"Image downloaded successfully to '{save_path}'.")
except IOError as e:
print(f"Error writing to file: {e}")
else:
print("Download cancelled.")
else:
print(f"No image found with ID {image_id}.")
except Exception as e:
print(f"Error downloading image: {e}")
finally:
connection.close()
10 months ago