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

相关推荐
wxl7812278 分钟前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder8 分钟前
Python入门(12)--数据处理
开发语言·python
LKID体1 小时前
Python操作neo4j库py2neo使用(一)
python·oracle·neo4j
小尤笔记1 小时前
利用Python编写简单登录系统
开发语言·python·数据分析·python基础
FreedomLeo11 小时前
Python数据分析NumPy和pandas(四十、Python 中的建模库statsmodels 和 scikit-learn)
python·机器学习·数据分析·scikit-learn·statsmodels·numpy和pandas
007php0072 小时前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang
Tech Synapse2 小时前
Python网络爬虫实践案例:爬取猫眼电影Top100
开发语言·爬虫·python
一行玩python2 小时前
SQLAlchemy,ORM的Python标杆!
开发语言·数据库·python·oracle
数据小爬虫@3 小时前
利用Python爬虫获取淘宝店铺详情
开发语言·爬虫·python
编程修仙4 小时前
Collections工具类
linux·windows·python