【发布时间】:2021-02-19 20:14:03
【问题描述】:
我正在尝试从 Oracle 数据库中读取一个大表并将其保存为 Python 3 中的本地 csv 文件。这是我的代码:
import cx_Oracle
import pandas as pd
user = 'me'
password = 'password'
dsn = 'dsn'
con = cx_Oracle.connect(user, password, dsn)
for chunk in pd.read_sql("select col_a, col_d, col_s from my_table", con, chunksize=10**4):
chunk.to_csv(r"my_path\my_file.csv", index = false)
但是,鉴于该表有 200k+ 行,并且我从 80+ 列中选择了 12 列,因此上面代码的性能简直是在爬行。
有没有更快的方法来读取表格并将其保存为 csv?
【问题讨论】:
-
为什么要涉及熊猫?几乎可以肯定,DBMS 有一种将查询结果导出到 CSV 的有效方法,涉及 python,尤其是 pandas,不会让事情变得更快。
-
大概你不应该在循环的每次迭代中进行文件 I/O,只在最后一次。
-
对 oracle 没有太多经验,但这看起来很有希望:oracle-base.com/articles/9i/generating-csv-files
-
200k+ 行实际上并不大。我每天使用 Python 和 pandas 查询一个超过 1600 万行的表。典型的查询在不到一秒的时间内完成。如果您有权访问该表,请确保它具有您正在查询的字段的适当索引。
-
你可以试试dask
标签: python oracle performance