【发布时间】:2021-10-06 15:26:05
【问题描述】:
我正在互联网上研究如何以更快的方式将 CSV 文件加载到 Oracle DB 表中
以下是我加载表的方式,该表作为文件中的 1000 条记录并很快被加载。
但如果有 50,000 条记录,则大约需要 50,000 条记录。 5 分钟加载。
有没有更快更有效的方式将 csv 文件加载到 Oracle 表中?
我的代码:
import cx_Oracle
import csv
myquery='insert into TABLE (COLUMNNAME1,COLUMNNAME2,COLUMNNAME3,COLUMNNAME4,COLUMNNAME5,COLUMNNAME6) values (:1, :2, :3 ,:4,:5,:6)'
separator='|'
oracleConnection='user/password@hostIP/database'
def fileLoading(oracleconnection, file_name,myquery,separator):
try:
con = cx_Oracle.connect(oracleConnection)
print("Connection established")
reader = csv.reader(open("demp.csv", "r"), header=None,delimiter=separator)
columns = []
for line in reader:
columns.append(line)
cur = con.cursor()
for line in columns:
print("Inserting record to table")
insrt_stmt = myquery
cur.execute(insrt_stmt, line)
con.commit()
cur.close()
print("load completed")
except Exception as er:
print('ERRO:',er)
【问题讨论】:
-
该速率对应于您的 1000 条记录需要 6 秒,有些人可能认为“没有时间”。
-
因为这是 Oracle,我会使用 SQL Loader,它真的是 fast。
-
您可以尝试 cursor.executemany 来帮助提高速度,也可以尝试使用一个提交语句。
-
删除“打印”。仅在循环外使用一次
insrt_stmt = myquery。最后只使用一个commit。只打开和关闭一次光标。
标签: python oracle csv cx-oracle