You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python argparse的SQLite文件追踪脚本:需新增查询与更新功能

解决方案:为文件追踪脚本添加查询与更新功能

1. 明确数据库表结构(适配现有逻辑)

先确保你的SQLite表支持多文件关联同一FfAMILY和FOLDER,示例建表语句:

CREATE TABLE IF NOT EXISTS file_tracker (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    ffamily TEXT NOT NULL,
    folder TEXT NOT NULL,
    date TEXT NOT NULL,
    path TEXT NOT NULL,
    fname TEXT NOT NULL,
    chunks INTEGER,
    md5 TEXT,
    zip TEXT
);

2. 扩展argparse支持子命令

将原有插入功能拆分为add子命令,新增query和update子命令,让命令行交互更清晰:

import argparse
import sqlite3

def get_db_connection():
    conn = sqlite3.connect('file_tracker.db')
    conn.row_factory = sqlite3.Row  # 支持按字段名访问查询结果
    return conn

def main():
    parser = argparse.ArgumentParser(description='文件追踪脚本 - 管理文件族、文件夹与文件信息')
    subparsers = parser.add_subparsers(dest='command', required=True)

    # 原有插入功能:add子命令
    add_parser = subparsers.add_parser('add', help='添加新文件记录')
    add_parser.add_argument('-ff', '--ffamily', required=True, help='文件族名称')
    add_parser.add_argument('-f', '--folder', required=True, help='文件夹路径')
    add_parser.add_argument('-d', '--date', required=True, help='文件日期')
    add_parser.add_argument('-p', '--path', required=True, help='文件完整路径')
    add_parser.add_argument('-fn', '--fname', required=True, help='文件名')
    add_parser.add_argument('-c', '--chunks', type=int, help='文件分块数')
    add_parser.add_argument('-m', '--md5', help='文件MD5值')
    add_parser.add_argument('-z', '--zip', help='压缩包路径')

    # 新增查询功能:query子命令
    query_parser = subparsers.add_parser('query', help='按文件族查询关联信息')
    query_parser.add_argument('-ff', '--ffamily', required=True, help='要查询的文件族名称')

    # 新增更新功能:update子命令(向指定文件族+文件夹添加新文件)
    update_parser = subparsers.add_parser('update', help='向指定文件族和文件夹添加新文件信息')
    update_parser.add_argument('-ff', '--ffamily', required=True, help='目标文件族名称')
    update_parser.add_argument('-f', '--folder', required=True, help='目标文件夹路径')
    update_parser.add_argument('-d', '--date', required=True, help='新文件日期')
    update_parser.add_argument('-p', '--path', required=True, help='新文件完整路径')
    update_parser.add_argument('-fn', '--fname', required=True, help='新文件名')
    update_parser.add_argument('-c', '--chunks', type=int, help='新文件分块数')
    update_parser.add_argument('-m', '--md5', help='新文件MD5值')
    update_parser.add_argument('-z', '--zip', help='新文件压缩包路径')

    args = parser.parse_args()

    conn = get_db_connection()
    cursor = conn.cursor()

    if args.command == 'add':
        # 原有插入逻辑
        cursor.execute('''
            INSERT INTO file_tracker (ffamily, folder, date, path, fname, chunks, md5, zip)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)
        ''', (args.ffamily, args.folder, args.date, args.path, args.fname, args.chunks, args.md5, args.zip))
        conn.commit()
        print(f"已添加文件记录:{args.fname}")

    elif args.command == 'query':
        # 按FfAMILY查询关联信息
        cursor.execute('''
            SELECT folder, date, fname, path, md5, chunks, zip
            FROM file_tracker
            WHERE ffamily = ?
            ORDER BY folder, date
        ''', (args.ffamily,))
        records = cursor.fetchall()

        if not records:
            print(f"未找到文件族 {args.ffamily} 的相关记录")
            return

        print(f"文件族 {args.ffamily} 的关联信息:")
        print("-" * 80)
        print(f"{'文件夹':<20} {'日期':<15} {'文件名':<20} {'MD5':<32}")
        print("-" * 80)
        for row in records:
            print(f"{row['folder']:<20} {row['date']:<15} {row['fname']:<20} {row['md5']:<32}")
        # 如需展示更多字段,可自行扩展输出格式

    elif args.command == 'update':
        # 向指定FfAMILY+FOLDER添加新文件记录
        cursor.execute('''
            INSERT INTO file_tracker (ffamily, folder, date, path, fname, chunks, md5, zip)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)
        ''', (args.ffamily, args.folder, args.date, args.path, args.fname, args.chunks, args.md5, args.zip))
        conn.commit()
        print(f"已向文件族 {args.ffamily} 的文件夹 {args.folder} 添加新文件:{args.fname}")

    conn.close()

if __name__ == '__main__':
    main()

3. 功能使用示例

查询功能

python file_tracker.py query --ffamily "ProjectA"

输出指定文件族下所有关联的文件夹、文件日期、文件名、MD5等信息,按文件夹和日期排序。

更新功能

python file_tracker.py update --ffamily "ProjectA" --folder "/data/docs" --date "2024-05-20" --path "/data/docs/report_v2.pdf" --fname "report_v2.pdf" --md5 "a1b2c3d4e5f6g7h8i9j0"

向指定文件族的目标文件夹中添加一条新的文件记录。

4. 可选优化点

  • 添加唯一约束(如UNIQUE(ffamily, folder, fname)),防止同一文件重复插入,并处理sqlite3.IntegrityError异常。
  • 扩展查询功能,支持按文件夹过滤,或导出结果为CSV/JSON格式。
  • 将日期字段改为DATE类型,支持更精准的时间范围查询。

内容的提问来源于stack exchange,提问作者voyager 1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:03:19