我正在使用cx.Oracle的Python运行SQL Oracle查询.然而,执行时间非常长,我希望有一些进度条(无论是一个实时计数器还是一个可视进度条)来显示查询的运行速率.

我发现这是可能的tqdm库,但我不确定如何将它集成到我的cx.Oracle查询.

这就是我现在运行查询的方式,它只显示查询完成后的开始时间、结束时间和运行时间,而不是我想要的.

q2 = """SELECT col1, col2
FROM TABLE1

WHERE col3 = (to_date('2024-03-31 00:20:00', 'yyyy-mm-dd HH24:MI:SS'))
AND
col2 >= (to_date('2024-03-01 00:00:00', 'yyyy-mm-dd HH24:MI:SS'))"""

start_time = datetime.datetime.today()
print("Started at", start_time.strftime("%H:%M:%S"))

# Put it all into a data frame
b = pd.DataFrame(cursor.execute(q2).fetchall())
b.columns = [i[0] for i in cursor.description]

end_time = datetime.datetime.today()
elapsed_time = end_time - start_time

print("Ended in", elapsed_time)
print("Fetched", len(b), "rows...")

推荐答案

执行SQL查询所需的时间取决于您的D.B.而且不能用进度条来跟踪😬

进度条将在从游标中提取每一行时更新,而不是在执行SQL查询本身期间更新.🤓

这是你的代码,有一个进度条:

start_time = datetime.datetime.today()
print("Started at", start_time.strftime("%H:%M:%S"))
cursor.execute(q2)
row = cursor.fetchone()
pbar = tqdm.tqdm(total=cursor.rowcount)
data = []
while row is not None:
    data.append(row)
    row = cursor.fetchone()
    pbar.update()
b = pd.DataFrame(data)
b.columns = [i[0] for i in cursor.description]
end_time = datetime.datetime.today()
elapsed_time = end_time - start_time
print("Ended in", elapsed_time)
print("Fetched", len(b), "rows...")
pbar.close()

Python相关问答推荐

在Python和matlab中显示不同 colored颜色 的图像

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

未删除映射表的行

如何让Flask 中的请求标签发挥作用

在线条上绘制表面

为什么默认情况下所有Python类都是可调用的?

如何更改分组条形图中条形图的 colored颜色 ?

Python中绕y轴曲线的旋转

当我try 在django中更新模型时,模型表单数据不可见

如何启动下载并在不击中磁盘的情况下呈现响应?

如何从需要点击/切换的网页中提取表格?

如何在BeautifulSoup/CSS Select 器中处理regex?

Scipy差分进化:如何传递矩阵作为参数进行优化?

根据过滤后的牛郎星图表中的数据计算新系列

如何关联来自两个Pandas DataFrame列的列表项?

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

如果列包含空值,则PANAS查询不起作用

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

当lambda函数作为参数传递时,pyo3执行