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,一经查实,立即删除!

相关文章

【无标题】2024.6.2

2024.6.2 【明霄升海平,飞彩镌流年。】 Sunday 四月廿六 A. 矩形覆盖 题目描述 有N个矩形,矩形的底边边长为1,且均在X轴上,高度给出,第i个矩形的高为h[i],求最少需要几个矩形才能覆盖这个图形。 例如h […

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

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

2024.05.18 校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、实习 | 东风日产2024实习生招聘正式启动 实习 | 东风日产2024实习生招聘正式启动 2、实习 | 达实智能实习生招募令! 实习 | 达实智能实习生招募令! 3、校招 | …

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

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

2.3.2_3 单链表的建立

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。 此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注! 谢…

【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…

面试题--this关键字

this 指向是前端面试中的常问题型,简单分析为以下几种: 1. 在全局作用域中,this 关键字固定指向全局对象 window 或者 global。 2. 在函数作用域中,取决于函数是如何被调用的。 1)函数直接调用,this 指向…

Leetcode 3169. Count Days Without Meetings

Leetcode 3169. Count Days Without Meetings 1. 解题思路2. 代码实现 题目链接:3169. Count Days Without Meetings 1. 解题思路 这一题的话我们只需要先对meeting的时间进行一下排序,然后不断更新当前连续开会的时间即可。当某一个会议开始时&#…

Java中lambda表达式是啥怎么使用

在Java中,Lambda表达式(也称为闭包)是一种简洁地表示匿名函数(即没有名称的函数)的方式。它们允许你将函数作为参数传递或赋值给变量,从而简化代码。Lambda表达式在Java 8及更高版本中引入。 Lambda表达式…

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

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

如何进入 -MGMTDB目录

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

Rust struct

Rust struct 1.实例化需要初始化全部成员变量2.如果需要实例化对象可变,加上mut则所有成员变量均可变 Rust支持通过已实例化的对象,赋值给未赋值的对象的成员变量 #![allow(warnings)] use std::io; use std::error::Error; use std::boxed::Box; use s…

【NumPy】深入解析numpy中的 iscomplex 方法

🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 🎓 博主简介: 我是云天徽上,一名对技…

下载文件流

export function downloadFile(file, name, type) { const link document.createElement(‘a’) link.href window.URL.createObjectURL(new Blob([file], { type: type })) link.target ‘_blank’ link.download name document.body.appendChild(link) link.click() docu…

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

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

从0开发一个Chrome插件:开发Chrome插件的必要知识

前言 这是《从0开发一个Chrome插件》系列的第二篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件? 尽请期待~ Chrome 插件的基本结构 一个C…