1
全部。 我使用從dbf(vfp)文件到oracle db的python加載數據。但是,效率並不好。創紀錄的700萬花費40分鐘。只有我想減少循環,這是關鍵點。代碼如下:Python:如何提高從vfp(dbf)到oracle的加載數據的效率?
import sys
import cx_Oracle
from dbfpy.dbf import *
dbhost=sys.argv[1]
dbport=sys.argv[2]
dbsid=sys.argv[3]
dbuser=sys.argv[4]
dbpasswd=sys.argv[5]
schema=sys.argv[6]
tbname=sys.argv[7]
vdate=sys.argv[8]
organ=0
gap=5000
tns = cx_Oracle.makedsn(dbhost,dbport,dbsid)
db = cx_Oracle.connect(dbuser,dbpasswd,tns)
execsql = 'truncate table ' + schema + '.' + tbname
cur = db.cursor()
cur.execute(execsql)
count=0
param=[];
execsql='insert into '+ schema + '.' + tbname + ' values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11)'
dbf = Dbf("E:\abc.dbf")
for rec in dbf:
param.append((vdate,rec['ZQ'],rec['TZ'],rec['TX'],rec['ZJ'],rec['ZJM'],rec['CQ'],rec['DH'],rec['RQ'],rec['ZZT'],rec['DXW']))
count += 1
if count >= gap:
cur.executemany(execsql,param);
db.commit()
param=[]
count = organ
if param:
cur.executemany(execsql,param);
db.commit()
cur.close()
db.close()
dbf.close()
每個人都可以幫我提高效率嗎?
大部分時間可能花費來回發送少量數據。例如,通過將10個插入組合成一個單獨的語句,比如'insert into table select'1'... from dual union,所有選擇'2'... from dual',通常可以使這些過程運行幾次,速度更快。 –