Python:如何提高从vfp(dbf)到oracle加载数据的效率?

标签 python oracle dbf

全部。 我使用python从dbf(vfp)文件加载数据到oracle db。但是效率不太好。记录7,000,000需要40分钟。只是我想减少循环,这是关键点。代码如下:

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()

大家可以帮我提高效率吗?

最佳答案

Oracle是否支持从.csv文件读取数据?如果是这样,请查看my dbf package创建一个包含必要字段的 .csv 文件(类似这样(未经测试)):

import dbf

with dbf.Table(r'c:\abc.dbf') as t:
    dbf.export(t, field_names='ZQ, TZ, TX, ZJ, ZJM, CQ, DH, RQ, ZZT, DXW')

这将使用这些字段中的数据创建 c:\abc.csv

关于Python:如何提高从vfp(dbf)到oracle加载数据的效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187912/

相关文章:

python - 我如何找到测试使用的固定装置?

Oracle识别数据类型

delphi - 在 Delphi 中对表进行物理排序

c# - 插入到 dbf 文件不接受空值

python - 将包含错误/警告的打印语句写入 Spyder 中的文件

python - 如何填充一列中的类别并将准确值粘贴到另一列中

python - 按子类类型过滤

sql - 只有 2 个不同值的列索引

sql - 将表中的数据存储到对象表中

python - 使用 Python 将 .csv 文件转换为 .dbf?