python编程:SQLite 管理图片数据库

在本博客中,我们将介绍如何使用 wxPython 和 sqlite3 模块构建一个 GUI 应用程序,该程序可以遍历指定文件夹中的所有图片,并将其信息存储到 SQLite 数据库中。
C:\pythoncode\new\InputImageOFFolderTOSqlite.py

项目简介

我们的目标是创建一个程序,该程序能够从用户指定的文件夹中读取图片文件,并将图片的以下信息存储到 SQLite 数据库的 pics 表中:

  • 图片数据(BLOB)
  • 图片文件名
  • 图片完整路径
  • 图片的最后修改日期
  • 图片的 MD5 码
环境设置

在开始编写代码之前,确保你已安装 wxPython 和 SQLite3 模块。可以使用以下命令安装 wxPython:

pip install wxPython
代码实现

以下是实现上述功能的完整 Python 程序:

import wx
import os
import sqlite3
import hashlib
from datetime import datetimeclass SQLiteImageImporter(wx.Frame):def __init__(self, parent, title):super(SQLiteImageImporter, self).__init__(parent, title=title, size=(500, 300))self.panel = wx.Panel(self)vbox = wx.BoxSizer(wx.VERTICAL)# Directory Selectionhbox1 = wx.BoxSizer(wx.HORIZONTAL)self.dir_path_text = wx.TextCtrl(self.panel)dir_path_btn = wx.Button(self.panel, label='Select Directory')dir_path_btn.Bind(wx.EVT_BUTTON, self.on_select_directory)hbox1.Add(self.dir_path_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)hbox1.Add(dir_path_btn, flag=wx.ALL, border=5)# Import Buttonimport_btn = wx.Button(self.panel, label='Import Images')import_btn.Bind(wx.EVT_BUTTON, self.on_import_images)vbox.Add(hbox1, flag=wx.EXPAND)vbox.Add(import_btn, flag=wx.ALL|wx.CENTER, border=10)self.panel.SetSizer(vbox)self.Centre()self.Show()def on_select_directory(self, event):with wx.DirDialog(self, "Choose directory with images", "", wx.DD_DEFAULT_STYLE) as dirDialog:if dirDialog.ShowModal() == wx.ID_OK:self.dir_path_text.SetValue(dirDialog.GetPath())def on_import_images(self, event):dir_path = self.dir_path_text.GetValue()if not dir_path:wx.MessageBox('Directory path is required', 'Error', wx.OK | wx.ICON_ERROR)returndb_path = "C:\\pythoncode\\new\\data\\picbase.db"conn = sqlite3.connect(db_path)cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS pics (id INTEGER PRIMARY KEY AUTOINCREMENT,pic BLOB,picname TEXT,picpath TEXT,picdate TEXT,picmd5 TEXT)''')for root, _, files in os.walk(dir_path):for filename in files:file_path = os.path.join(root, filename)if os.path.isfile(file_path) and file_path.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):with open(file_path, 'rb') as f:pic_data = f.read()picname = filenamepicpath = file_pathpicdate = datetime.fromtimestamp(os.path.getmtime(file_path)).strftime('%Y-%m-%d %H:%M:%S')picmd5 = hashlib.md5(pic_data).hexdigest()cursor.execute('''INSERT INTO pics (pic, picname, picpath, picdate, picmd5)VALUES (?, ?, ?, ?, ?)''', (pic_data, picname, picpath, picdate, picmd5))conn.commit()conn.close()wx.MessageBox('Images imported successfully', 'Success', wx.OK | wx.ICON_INFORMATION)if __name__ == '__main__':app = wx.App(False)frame = SQLiteImageImporter(None, "SQLite Image Importer")app.MainLoop()
代码解释
  1. 选择目录:用户可以通过点击“Select Directory”按钮选择包含图片的文件夹。
  2. 导入图片:点击“Import Images”按钮将所选文件夹及其子文件夹中的所有图片文件导入到数据库中。
  3. 数据库结构:数据库表 pics 包含以下字段:
    • pic: 图片数据(BLOB)
    • picname: 图片文件名
    • picpath: 图片完整路径
    • picdate: 图片文件的最后修改日期
    • picmd5: 图片文件的 MD5 码
使用步骤
  1. 运行程序后,首先选择包含图片的文件夹。
  2. 点击“Import Images”按钮,将图片文件导入到数据库中。
  3. 程序会在指定路径 C:\pythoncode\new\data\picbase.db 创建或更新数据库并插入图片信息。
结果如下:

在这里插入图片描述
在这里插入图片描述

结语

通过这个简单的 GUI 应用程序,用户可以方便地将指定文件夹及其子文件夹中的所有图片信息批量导入到 SQLite 数据库中。该程序实现了基本的数据库操作和文件处理功能,是一个不错的学习和实践例子。希望本文能对你有所帮助!如果有任何问题或建议,欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信里的东西怎么打印出来呢

随着微信的普及,我们的日常生活和工作都离不开这个强大的社交工具。无论是重要的工作文件、孩子的作业、还是精彩的旅行照片,我们都习惯在微信里保存和分享。但是,当需要将这些微信里的内容打印出来时,很多人可能会感到困惑和麻烦…

电力能源指挥中心调度台解决方案主要关注的问题

调度台是指挥中心不可或缺的设备,随着信息化建设的不断深入,电力能源指挥中心已成为重要平台。因此,构建一套高效、智能的电力能源指挥中心调度台解决方案,需要关注以下关键问题: 一、实时监控与数据采集 电力能源指挥…

【AI 大揭秘】ChatGPT 写作绝技与必备提示词大全

利用ChatGPT撰写文章是一种极具创意的方法,它能显著提升您的写作效率,并帮助您创作出高质量的内容。通过人工智能的辅助,您可以迅速、便捷地生成精美文章,或至少为您的下一个写作项目提供灵感。 不管您是在撰写文章、剧本还是电子…

react路由参数path不再支持正则?比较v5和v6写法的差异性

文章目录 前言v5方式:直接在path参数中,写入对应正则(1)代码详细注释如下(2)页面输出如下,会出现undefined的情况 v6方式: 在路由对象中配置,但只可配动态路由,不可用正则…

TH方程学习(4)

一、背景介绍 在本节将会对TH方程打包成一个函数,通过输入目标星的轨道要素,追踪星在目标星VVLH坐标系下的相对位置和速度,以及预报的时间,得到预报时刻追踪星在VVLH坐标系下的位置和速度,以及整个状态转移矩阵。 合并…

替换所有的问号 ---- 模拟

题目链接 题目: 分析: 我们只需要遍历字符串, 将所有?进行修改即可但是需要判断, 修改的字符不能和前面后面重复同时, 有一个细节需要处理, 就是当?在最前面时, 没有前面的符号需要判断 在最后面的时候, 没有后面的字符需要判断 代码: class Solution {public String mod…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

打造智能化未来:智能运维系统架构解析与应用实践

在数字化转型的大背景下,智能运维系统成为了企业提升效率、降低成本、增强安全性的关键利器。本文将深入探讨智能运维系统的技术架构,介绍其核心要素和应用实践,帮助读者全面了解智能运维系统的概念、优势和应用价值。 ### 1. 智能运维系统的…

如何进入 -MGMTDB目录

想想这个问题,大家可能觉得很简单吧,先不看答案,你试一试如何进去 1.问题现象: 我直接进入: cd -MGMTDB 直接就报错了: [gridhost03 _mgmtdb]$ cd -MGMTDB -bash: cd: -M: invalid option cd: usage: c…

Mujoco仿真【xml文件的学习 4】

在学习Mujoco仿真的过程中,mujoco的版本要选择合适。先前我将mujoco的版本升级到了mujoco-3.1.4,在运行act的仿真代码时遇到了问题,撰写了博客: Aloha机械臂的mujoco仿真问题记录-CSDN博客 下面在进行mujoco仿真时,统…

十_信号3-可重入函数

如上图所示链表,在插入节点的时候捕获到了信号,并且该信号的自定义处理方式中也调用了插入节点的函数。 在main函数中,使用insert向链表中插入一个节点node1,在执行insert的时,刚让头节点指向node1以后(如上图序号1)&…

linux系统下,mysql增加用户

首先,在linux进入mysql mysql -u root -p 然后查看当前用户: select user,host from user; 增加用户语句: CREATE USER 用户名host范围 IDENTIFIED BY 密码;

【C++】C++入门1.0

鼠鼠最近在学C,那么好,俺来做笔记了! 目录 1.C关键字(C98) 2.命名空间 2.1.命名空间定义 2.2.命名空间的使用 3.C的输入&&输出 4.缺省参数 4.1缺省参数概念 4.2.缺省参数的分类 5.函数重载 5.1.函数重载概念 5.2.C支持函数…

深度学习-04-数值的微分

深度学习-04-数值的微分 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动,也…

所有人都可以做的副业兼职,短剧推广,1天挣几百,附详细方法!

自从上次向大家介绍了短剧掘金项目以来,便陆续收到了众多朋友的询问:现在是否还能加入短剧掘金的大军?答案是肯定的。目前,无论是各大视频平台还是其他渠道,短剧掘金项目都呈现出蓬勃发展的态势。而且,相关…

SSM高校社团管理系统-计算机毕业设计源码86128

目 录 摘要 1 绪论 1.1研究背景与意义 1.2开发现状 1.3研究方法 1.4 ssm框架介绍 1.5论文结构与章节安排 2 高校社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分…

QT实现动态翻译切换

1、实现QT动态中英文切换效果 效果如下: 2、原理 因为软件本身就是中文版,所以只需准备一个英文版的翻译即可,,那就是将所有需要翻译的地方用tr包裹,然后首先执行lupdate更新一下,接着用qt的翻译软件 Qt Linguist打开ts文件进行翻译,然后保存,最后使用 lrelease发布一…

位运算专题

常见位运算总结: 1. 基础位运算 << 左移 >> 右移 ~ 按位取反 & 按位与 口诀: 有0则0 | 按位或 口诀: 有1则1 ^ 异或 口诀:相同为0,相异为1 / 无进位相加 2. 位运算的优先级 做题时, 能加括号就加括号, 无需管优先级如何 3. 给一个二进制数n, 确定…

为什么总是卡在验证真人这里无法通过验证?

最近总是在浏览某些网站的时候卡在这个“确认你是真人”的验证页面&#xff0c;无法通过真人验证&#xff0c;这是怎么回事儿&#xff1f;如何解决呢&#xff1f; 首先&#xff0c;出现这个“确认您是真人”的验证一般都是这个网站使用了 CloudFlare 的安全防护 WAF 规则才会出…

Ray Tracing in one Weekend But on CUDA

Ray Tracing in one Weekend But on CUDA 环境说明项目代码项目内容思路实现方法效果 环境说明 代码运行在Visual Studio 2019环境&#xff0c;显卡为NVIDIA GeForce GTX 1650&#xff0c;CUDA版本为11.6&#xff0c;cuDNN版本为8.4.0。具体配置方式见CUDA C/C 从入门到入土 第…