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.rhkb.cn/news/338503.html

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

相关文章

【Modelground】个人AI产品MVP迭代平台(2)——网站从0-1部署教程

文章目录 1.选购一台云服务器2. 购买域名3. 通过nginx部署静态网站4. 通过gitee在云服务器拉取代码5. ICP备案总结 1.选购一台云服务器 目前阿里云在促销,一台2核2GB内存3Mbps宽带的云服务器,一年只需要99元,学生更便宜,我认为这…

LitCTF部分wp

litctf wp 第一次ak了web和misc,非常激动,感谢lictf给我这个机会 最终成果 全靠队里的密码逆向✌带飞。一个人就砍了近一半的分数 这里是我们队的wp web exx 题目名反过来就是xxe,考察xxe,查看登录的数据包 发现传的就是xml…

【Java数据结构】详解LinkedList与链表(四)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2.什么是LinkedList 3.LinkedList的使用 3.1LinkedList的构造方法 3.2LinkedList的其他常用方法介绍 addAll方法 subList方法 LinkedList的常用方法总使…

携程梁建章:持续投资创新与AI,开启旅游行业未来增长

5月30至31日,携程集团在上海和张家界举办Envision 2024全球合作伙伴大会,邀请超50个国家和地区的1600余名外籍旅游业嘉宾与会,共同探讨中国跨境旅游市场发展机遇,讲好中国故事。 携程国际业务增速迅猛,创新与AI解锁未…

【设计模式深度剖析】【4】【结构型】【组合模式】| 以文件系统为例加深理解

👈️上一篇:适配器模式 | 下一篇:桥接模式👉️ 设计模式-专栏👈️ 目 录 组合模式定义英文原话直译如何理解? 3个角色UML类图代码示例 组合模式的优点组合模式的使用场景示例解析:文件系统UML类图代码示例 组合模…

sqoop操作

介绍 sqoop是隶属于Apache旗下的, 最早是属于cloudera公司的,是一个用户进行数据的导入导出的工具, 主要是将关系型的数据库(MySQL, oracle...)导入到hadoop生态圈(HDFS,HIVE,Hbase...) , 以及将hadoop生态圈数据导出到关系型数据库中 操作 将数据从mysql中导入到HDFS中 1.全量…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

echarts绘制三维柱状图

echarts ECharts 是一个使用 JavaScript 实现的开源可视化库,主要用于数据的可视化展示。ECharts 支持丰富的图表类型,如折线图、柱状图、饼图、地图、K线图等,可以满足不同类型数据的展示需求。 文档地址:echarts 本次所绘制三…

React-表单受控绑定

概念:使用React组件的状态(useState)控制表单的状态 1.准备一个React状态值 2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数

【Linux】写一个日志类

文章目录 1. 源代码2. 函数功能概览3. 代码详细解释3.1 头文件和宏定义3.2 Log类定义3.3 打印日志的方法3.4 操作符重载和析构函数3.5 可变参数函数的原理 4. 测试用例 1. 源代码 下面代码定义了一个 Log 类,用于记录日志信息。这个类支持将日志信息输出到屏幕、单…

T检验——单样本t检验/两独立样本t检验/配对样本t检验

T检验——单样本t检验/两独立样本t检验/配对样本t检验 1.单样本t检验1.1 适用范围 2. ( 独立样本t检验)两独立样本t检验3.ANOVA多组样本显著性检验(2组以上)4. 配对样本T检验 1.单样本t检验 1.1 适用范围 单样本t检验:即已知样本…

virtualbox虚拟机、centos7安装增强工具

文章目录 1. virtualBox语言设置2. 设置终端启动快捷键3. 添加virtualbox 增强工具4. 设置共享文件夹 1. virtualBox语言设置 virtualbox -> file -> perferences -> language ->选择对应的语言 -> OK virtualbox -> 管理 -> 全局设定 -> 语言 -> …

Redis数据类型(下篇)

5.Redis有序集合zset(sorted set) 本质就是在set的基础上,每个val值前面加了一个score分数值。 (1)向有序集合中添加多个(或者一个)元素和其对应的分数 127.0.0.1:6379> zadd zset1 100 a 90 b 80 c 70 d 60 e (…

C++入门3——类与对象2(类的6个默认成员函数)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数的概念 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 析构函数的特性 4.拷贝构造函数 4.1 拷贝构造函数的概念 4.2 拷贝构造函数的特性 5.赋值运算符重载函数 5.1运算符重载函数 5.2 赋值运算符重…

如何跨渠道分析销售数据 - 7年制造业销售经验小结

如何跨渠道分析销售数据 - 7年制造业销售经验小结(1) 【前言】 在我过去7年销售工作生涯中,从第一年成为公司销冠后,我当时的确自满的一段时间,认为自己很了不起。但是第一年的销售业绩并没有拿到提成,最…

【开源】课程管理平台 JAVA+Vue.js+SpringBoot+MySQL

目录 一、项目介绍 课程管理模块 作业题目模块 考试阅卷模块 教师评价模块 部门角色菜单模块 二、项目截图 三、核心代码 一、项目介绍 Vue.jsSpringBoot前后端分离新手入门项目《课程管理平台》,包括课程管理模块、作业题目模块、考试阅卷模块、教师评价模…

二叉树的右视图,二叉搜索树中第k小的元素

第一题&#xff1a; 代码如下&#xff1a; vector<int> rightSideView(TreeNode* root) {vector<int> res;if (root nullptr)return res;queue<TreeNode*> q;q.push(root);int k 1;while (!q.empty()){while (k--){TreeNode* front q.front();q.pop();i…

乡镇围栏数据存储ES实践

空白的是ES渲染的问题&#xff0c;放大后看到几乎没有丢失数据 1. ES索引建立 PUT /town_fence {"settings": {"number_of_shards": 1},"mappings": {"properties": {"province": {"type": "keyword"…

ClickHouse数据管理与同步的关键技术

2024年 5 月 18 日&#xff0c;ClickHouse官方首届杭州 Meetup 活动成功举行。本次活动由 ClickHouse 和阿里云主办&#xff0c;NineData 和云数据库技术社区协办。围绕ClickHouse的核心技术、应用案例、最佳实践、数据管理、以及迁移同步等方面&#xff0c;和行业专家展开交流…

基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MFCC特征提取 4.2 GRNN神经网络概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................…