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

如何为Python操作Oracle数据库插入数据添加进度条?

给Python插入脚本添加进度条的实现方案

要给你的文件读取+数据库插入脚本添加进度条,最便捷的方式是使用tqdm第三方库,下面是具体步骤和修改后的代码:

1. 安装依赖库

首先安装tqdm(一个轻量易用的进度条工具):

pip install tqdm

2. 修改后的完整代码

from tqdm import tqdm

insert_sty = "insert into MRSTY (CUI,TUI,STN,STY,ATUI,CVF) values (:0,:1,:2,:3,:4,:5)"
records = []

file_path = "../umls_files/umls-2023AA-metathesaurus-full/2023AA/META/MRSTY.RRF"
with open(file_path, 'r') as f:
    # 先统计文件总行数,让进度条显示更准确
    total_lines = sum(1 for _ in f)
    f.seek(0)  # 回到文件开头
    
    # 读取文件时显示进度条,同时直接处理每条记录
    for line in tqdm(f, total=total_lines, desc="读取并处理文件"):
        line = line.strip()
        parts = line.split("|")
        if parts:
            parts.pop()  # 移除末尾空字符串
        records.append(parts)

# 插入数据库时显示进度条
for i in tqdm(records, desc="插入数据库记录"):
    try:
        cur.execute(insert_sty, i)
    except Exception as e:
        # 用换行确保错误信息不覆盖进度条
        print(f"\n错误记录: {i}")
        print(f"错误信息: {str(e)}")
        
conn.commit()
print("\n所有记录提交完成")

关键改动说明

  • 导入tqdm库,用它包装循环即可生成动态进度条
  • 读取文件时先统计总行数,让进度条能显示准确的完成比例
  • 将原代码中“先存所有记录再批量处理末尾空字符串”的逻辑,改为读取时直接处理,节省内存同时让进度条更早反馈
  • 移除了原代码中每条插入都打印的record inserted,避免刷屏干扰进度条显示
  • 异常处理中添加\n,确保错误信息能在进度条下方正常显示

无第三方库的简易实现

如果不想安装额外库,也可以手动实现简单进度条:

insert_sty = "insert into MRSTY (CUI,TUI,STN,STY,ATUI,CVF) values (:0,:1,:2,:3,:4,:5)"
records = []

file_path = "../umls_files/umls-2023AA-metathesaurus-full/2023AA/META/MRSTY.RRF"
with open(file_path, 'r') as f:
    total_lines = sum(1 for _ in f)
    f.seek(0)
    processed = 0
    
    for line in f:
        line = line.strip()
        parts = line.split("|")
        if parts:
            parts.pop()
        records.append(parts)
        
        processed += 1
        # 打印简易进度条,\r实现覆盖更新
        progress = (processed / total_lines) * 100
        print(f"\r读取进度: {progress:.1f}% [{processed}/{total_lines}]", end="")
    print("\n读取完成")

total_records = len(records)
processed = 0
for i in records:
    try:
        cur.execute(insert_sty, i)
        processed += 1
        progress = (processed / total_records) * 100
        print(f"\r插入进度: {progress:.1f}% [{processed}/{total_records}]", end="")
    except Exception as e:
        print(f"\n错误记录: {i}")
        print(f"错误信息: {str(e)}")
        
conn.commit()
print("\n所有记录提交完成")

这种方式没有速度、剩余时间等高级显示,但无需额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:07:56