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

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

C:\pythoncode\new\InputImageOFFolderTOSqlite.py

项目简介

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

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

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

bash 复制代码
pip install wxPython
代码实现

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

python 复制代码
import wx
import os
import sqlite3
import hashlib
from datetime import datetime

class 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 Selection
        hbox1 = 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 Button
        import_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)
            return
        
        db_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 = filename
                    picpath = file_path
                    picdate = 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 数据库中。该程序实现了基本的数据库操作和文件处理功能,是一个不错的学习和实践例子。希望本文能对你有所帮助!如果有任何问题或建议,欢迎留言讨论。

相关推荐
Channing Lewis18 分钟前
python生成随机字符串
服务器·开发语言·python
资深设备全生命周期管理1 小时前
以Python 做服务器,N Robot 做客户端,小小UI,拿捏
服务器·python·ui
洪小帅1 小时前
Django 的 `Meta` 类和外键的使用
数据库·python·django·sqlite
夏沫mds1 小时前
web3py+flask+ganache的智能合约教育平台
python·flask·web3·智能合约
去往火星1 小时前
opencv在图片上添加中文汉字(c++以及python)
开发语言·c++·python
Bran_Liu1 小时前
【LeetCode 刷题】栈与队列-队列的应用
数据结构·python·算法·leetcode
懒大王爱吃狼3 小时前
Python绘制数据地图-MovingPandas
开发语言·python·信息可视化·python基础·python学习
数据小小爬虫3 小时前
如何使用Python爬虫按关键字搜索AliExpress商品:代码示例与实践指南
开发语言·爬虫·python
martian6653 小时前
第17篇:python进阶:详解数据分析与处理
开发语言·python
无码不欢的我3 小时前
使用vscode在本地和远程服务器端运行和调试Python程序的方法总结
ide·vscode·python