使用Python和pyodbc库将文件信息插入Access数据库

将文件信息插入 Access 数据库的博客文章示例:


简介:
在日常编程工作中,我们经常需要处理文件和文件夹。有时,我们需要遍历文件夹中的所有文件,并将文件的路径、类型、文件名以及修改日期和创建日期等信息保存到数据库中。本文将介绍如何使用Python编程语言和wxPython库创建一个简单的文件浏览器界面,使用户能够选择文件夹并将文件信息插入到Access数据库中。
在这里插入图片描述

准备工作

在开始之前,确保你的计算机上已经安装了以下软件和库:

  • Python编程语言(推荐使用最新版本)
  • wxPython库(用于创建界面)
  • pyodbc库(用于连接和操作Access数据库)

你可以使用pip命令安装wxPython和pyodbc库:

pip install wxPython
pip install pyodbc

创建界面

首先,我们需要使用wxPython库创建一个简单的界面,使用户能够选择文件夹并查看文件信息。以下是创建界面的主要步骤:

  1. 导入所需的库:
import wx
import wx.grid
import os
import pyodbc
from datetime import datetime
  1. 创建数据库连接:
db_path = r'C:\path\to\your\database.accdb'
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path

conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
  1. 创建主窗口:
class MainFrame(wx.Frame):
    def __init__(self, parent):
        super().__init__(parent, title='File Explorer', size=(800, 600))
        
        self.panel = wx.Panel(self)
        
        # 创建选择文件夹按钮和文件列表表格
        self.select_folder_btn = wx.Button(self.panel, label='Select Folder')
        self.file_list_grid = wx.grid.Grid(self.panel)
        
        # 设置文件列表表格的列名
        self.file_list_grid.CreateGrid(0, 5)
        self.file_list_grid.SetColLabelValue(0, 'Path')
        self.file_list_grid.SetColLabelValue(1, 'Type')
        self.file_list_grid.SetColLabelValue(2, 'Filename')
        self.file_list_grid.SetColLabelValue(3, 'File Modify')
        self.file_list_grid.SetColLabelValue(4, 'File Create')
        
        # 创建垂直布局管理器
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.select_folder_btn, 0, wx.ALL, 5)
        sizer.Add(self.file_list_grid, 1, wx.EXPAND | wx.ALL, 5)
        self.panel.SetSizer(sizer)
        
        # 绑定选择文件夹按钮的点击事件
        self.select_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_folder)
  1. 处理文件夹选择事件:
def on_select_folder(self, event):
    # 打开文件夹选择对话框
    dlg = wx.DirDialog(self, "Select a folder")
    if dlg.ShowModal() == wx.ID_OK:
        folder_path = dlg.GetPath()
        self.process_files(folder_path)
    dlg.Destroy()
  1. 处理文件信息处理:
def process_files(self, folder_path):
    # 清空文件列表表格
    self.file_list_grid.ClearGrid()
    
    # 遍历文件夹中的文件
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            file_type = os.path.splitext(file_path)[1]
            file_name = os.path.basename(file_path)
            file_modify = datetime.fromtimestamp(os.path.getmtime(file_path))
            file_create = datetime.fromtimestamp(os.path.getctime(file_path))
            
            # 将文件信息插入数据库
            cursor.execute('''
                INSERT INTO path (path, type, filename, filemodify, filecreate)
                VALUES (?, ?, ?, ?, ?)
            ''', file_path, file_type, file_name, file_modify, file_create)
            conn.commit()
            
            # 显示文件信息在文件列表表格中
            row_count =self.file_list_grid.GetNumberRows()
            self.file_list_grid.AppendRows(1)
            self.file_list_grid.SetCellValue(row_count, 0, file_path)
            self.file_list_grid.SetCellValue(row_count, 1, file_type)
            self.file_list_grid.SetCellValue(row_count, 2, file_name)
            self.file_list_grid.SetCellValue(row_count, 3, str(file_modify))
            self.file_list_grid.SetCellValue(row_count, 4, str(file_create))
  1. 运行应用程序:
if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame(None)
    frame.Show()
    app.MainLoop()

全部代码

import wx
import wx.grid
import os
import pyodbc
from datetime import datetime

# 数据库连接信息
db_path = r'./database1.accdb'
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + db_path

# 创建数据库连接
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

# # 创建表格(如果不存在)
# cursor.execute('''
#     CREATE TABLE IF NOT EXISTS path (
#         id AUTOINCREMENT PRIMARY KEY,
#         path TEXT,
#         type TEXT,
#         filename TEXT,
#         filemodify DATETIME,
#         filecreate DATETIME
#     )
# ''')
# conn.commit()

# 创建主窗口
class MainFrame(wx.Frame):
    def __init__(self, parent):
        super().__init__(parent, title='File Explorer', size=(800, 600))
        
        self.panel = wx.Panel(self)
        
        # 创建选择文件夹按钮和文件列表表格
        self.select_folder_btn = wx.Button(self.panel, label='Select Folder')
        self.file_list_grid = wx.grid.Grid(self.panel)
        
        # 设置文件列表表格的列名
        self.file_list_grid.CreateGrid(0, 5)
        self.file_list_grid.SetColLabelValue(0, 'Path')
        self.file_list_grid.SetColLabelValue(1, 'Type')
        self.file_list_grid.SetColLabelValue(2, 'Filename')
        self.file_list_grid.SetColLabelValue(3, 'File Modify')
        self.file_list_grid.SetColLabelValue(4, 'File Create')
        
        # 创建垂直布局管理器
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.select_folder_btn, 0, wx.ALL, 5)
        sizer.Add(self.file_list_grid, 1, wx.EXPAND | wx.ALL, 5)
        self.panel.SetSizer(sizer)
        
        # 绑定选择文件夹按钮的点击事件
        self.select_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_folder)
    
    def on_select_folder(self, event):
        # 打开文件夹选择对话框
        dlg = wx.DirDialog(self, "Select a folder")
        if dlg.ShowModal() == wx.ID_OK:
            folder_path = dlg.GetPath()
            self.process_files(folder_path)
        dlg.Destroy()
    
    def process_files(self, folder_path):
        # 清空文件列表表格
        self.file_list_grid.ClearGrid()
        
        # 遍历文件夹中的文件
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                file_type = os.path.splitext(file_path)[1]
                file_name = os.path.basename(file_path)
                file_modify = datetime.fromtimestamp(os.path.getmtime(file_path))
                file_create = datetime.fromtimestamp(os.path.getctime(file_path))
                
                # 将文件信息插入数据库
                cursor.execute('''
                    INSERT INTO path (path, type, filename, filemodify, filecreate)
                    VALUES (?, ?, ?, ?, ?)
                ''', file_path, file_type, file_name, file_modify, file_create)
                conn.commit()
                
                # 显示文件信息在文件列表表格中
                row_count = self.file_list_grid.GetNumberRows()
                self.file_list_grid.InsertRows(row_count)
                self.file_list_grid.SetCellValue(row_count, 0, file_path)
                self.file_list_grid.SetCellValue(row_count, 1, file_type)
                self.file_list_grid.SetCellValue(row_count, 2, file_name)
                self.file_list_grid.SetCellValue(row_count, 3, str(file_modify))
                self.file_list_grid.SetCellValue(row_count, 4, str(file_create))
        
        # 调整文件列表表格的列宽
        self.file_list_grid.AutoSizeColumns()
        
# 创建应用程序对象
app = wx.App()

# 创建主窗口对象并显示
frame = MainFrame(None)
frame.Show()

# 启动应用程序主循环
app.MainLoop()

# 关闭数据库连接
cursor.close()
conn.close()

创建Access数据库表

在运行以上代码之前,你需要在Access数据库中创建一个名为 “path” 的表,用于存储文件信息。可以按照以下步骤创建表:

  1. 打开Access数据库文件。
  2. 在 “数据库工具” 面板中,选择 “表设计”。
  3. 在 “表设计” 视图中,创建以下字段:
    • path:文本类型,用于存储文件路径。
    • type:文本类型,用于存储文件类型。
    • filename:文本类型,用于存储文件名。
    • filemodify:日期/时间类型,用于存储文件修改日期。
    • filecreate:日期/时间类型,用于存储文件创建日期。
  4. 保存表并关闭Access数据库。

运行代码

保存以上代码为 fileinfotoaccess.py 文件,并确保你的计算机上已经安装了所需的库和软件。接下来,你可以运行该文件,选择一个文件夹,并将文件信息插入到Access数据库中。你还可以在界面中查看文件信息。

本文介绍了如何使用Python和wxPython库创建一个简单的文件浏览器界面,并将文件信息插入到Access数据库中。你可以根据自己的需求对代码进行修改和扩展,以适应更多功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ajax 笔记(一)—— Ajax 入门

笔记目录 1. Ajax 入门1.1 Ajax 概念1.2 axios 使用1.2.1 URL1.2.2 URL 查询参数1.2.3 小案例-查询地区列表1.2.4 常用请求方法和数据提交1.2.5 错误处理 1.3 HTTP 协议1.3.1 请求报文1.3.2 响应报文 1.4 接口文档1.5 案例1.5.1 用户登录(主要业务)1.5.2…

会玩这 10 个 Linux 命令,一定是个有趣的 IT 男!

Linux当中有很多比较有趣的命令,可以动手看看,很简单的。 1.rev命令 一行接一行地颠倒所输入的字符串。 运行: $rev如输入:shiyanlou shiyanlou2.asciiview命令 1.先安装aview $sudo apt-get install aview2.再安装imagema…

react中使用路由起手式,一些思路和细节。

一.安装并配置 我们选择使用react-router实现路由效果 yarn add react-router-dom下载后需要对Route进行引入,是个内置的组件。该组件是有两个属性一个是path,一个是component,path是组件对应的路由,component是对应的组件 二.…

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php(CodeI…

php如何对接伪原创api

在了解伪原创api的各种应用形态之后,我们继续探讨智能写作背后的核心技术。需要说明的是,智能写作和自然语言生成、自然语言理解、知识图谱、多模算法等各类人工智能算法都有紧密的关联,在百度的智能写作实践中,常根据实际需求将多…

C++11时间日期库chrono的使用

chrono是C11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。 时钟与时间点 chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应…

Jmeter-压测时接口按照顺序执行-临界部分控制器

文章目录 临界部分控制器存在问题 临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加&a…

XML 数据传输格式

目录 XML简介 一、初识XML 1.什么是 XML? 2.XML 和 HTML 之间的差异 3.XML 不会做任何事情 4.通过 XML 您可以发明自己的标签 5.XML 不是对 HTML 的替代 二、XML 用途 1.XML 把数据从 HTML 分离 2.XML 简化数据共享 3.XML 简化数据传输 三、XML 树结构 1.一个 XML 文…

大语言模型:LLM的概念是个啥?

一、说明 大语言模型(维基:LLM- large language model)是以大尺寸为特征的语言模型。它们的规模是由人工智能加速器实现的,人工智能加速器能够处理大量文本数据,这些数据大部分是从互联网上抓取的。 [1]所构建的人工神…

Word(1):文章页码设置

1.需求 在文档的封皮页不设置页码,在目录页页码设置为罗马数字,在正文使用阿拉伯数字。 2.解决方法 step1: 在封皮页的最后,点击”插入“-分隔符-分节符(下一页) step2:在目录页的最后&…

Amazon EMR Hudi 性能调优——Clustering

随着数据体量的日益增长,人们对 Hudi 的查询性能也提出更多要求,除了 Parquet 存储格式本来的性能优势之外,还希望 Hudi 能够提供更多的性能优化的技术途径,尤其当对 Hudi 表进行高并发的写入,产生了大量的小文件之后&…

【C/C++】STL queue 非线程安全接口,危险!

STL 中的 queue 是非线程安全的,一个组合操作:front(); pop() 先读取队首元素然后删除队首元素,若是有多个线程执行这个组合操作的话,可能会发生执行序列交替执行,导致一些意想不到的行为。因此需要重新设计线程安全的…

U盘安装CentOS7系统出现dracut timeout的解决办法

文章目录 业务场景操作步骤U盘装CentOS7系统确定U盘盘符修改启动命令系统配置 总结 业务场景 我们在某市实施交通信控平台项目,我们申请了一台服务器,用于平台安装由于机房机器只有内网,不连互联网,我们无法安装所需要的软件&…

考公-判断推理-逻辑判断

且和或 只能有一个人是我老婆,要么小红,要么小丽,不可能都是我老婆,虽然有些人心里是这么想的 虽然,但是,且 虽然我很丑,但是我很温柔 或的翻译,否一推一 例题 例题 德摩根 例题…

EndNote 21 for Mac(文献管理软件) v21.0.1中文版

EndNoter mac是一款参考文献管理软件,旨在帮助学术研究者、学生和专业人士有效地管理和引用参考文献。该软件提供了许多功能,使用户可以轻松地组织、搜索和引用各种类型的文献。 EndNoter mac软件特点和功能 1. 参考文献管理:EndNoter允许用…

精挑细选的几个宝藏软件

是不是感觉你的电脑里面永远都缺少一款软件?每次想要使用某个功能的时候总是不能找到合适的,还要先去网上找,小编给大家分享几款超级实用的软件,建议低调收藏哦~ Proxyee-down/下载工具 proxyee-down是一款免费开源的http下载工…

Nginx之lnmp架构

目录 一.什么是LNMP二.LNMP环境搭建1.Nginx的搭建2.安装php3.安装数据库4.测试Nginx与PHP的连接5.测试PHP连接数据库 一.什么是LNMP LNMP是一套技术的组合,Llinux,Nnginx,Mmysql,Pphp 首先Nginx服务是不能处理动态资源请求&…

urllib与数据解析

urllib爬取数据 import urllib.request as request# 定义url url "https://www.baidu.com" #模拟浏览器发起请求获取响应对象 response request.urlopen(url)""" read方法返回的是字节形式的二进制数据 二进制--》字符串 解码 decode( 编码的格式…

【视频】使用OBS将MP4推流至腾讯云直播

1、下载OBS OBS官网:https://obsproject.com/ OBS支持Win、Mac、Linux,如果下载速度很慢,建议使用迅雷下载 2、OBS推流设置 2.1 添加场景 默认会有一个“场景”,如果想继续添加可以点击“+”按钮 2.2 添加媒体源 1)点击“来源”窗口中“+”按钮 2)支持的媒体源如…