使用python将大量XLS数据加载到Oracle中

2024-06-07 07:13:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个超过300万个记录XLS文件,我需要使用python2.7将其转储到oracle12cdb(直接转储)中。在

我使用Cx峎Oracle python包来建立与Oracle的连接,但是读取和转储XLS(使用openpyxl pckg)的速度非常慢,并且性能会降低数千条/百万条记录。在

从脚本的角度来看,有两种方法-

  1. 我尝试过大容量加载,方法是读取数组中的所有值,然后使用cursor prepare(带绑定变量)和cursor将其转储太多了。这个不能很好地处理大量数据。

  2. 数据的迭代加载抓到了。甚至这种方式存在性能问题。

作为最佳实践,我可以部署哪些选项和技术/软件包来将这些数据从XLS加载到Oracle数据库?是否建议通过脚本来加载此数据量,或者我是否应该使用ETL工具? 到现在为止,我只有选择通过python脚本,所以请回答前一个


Tags: 文件数据方法脚本记录性能xlscursor
3条回答

基本上,对于大容量的数据,任何语言都要强调I/O,除了C。最好的方法是使用数据库供应商提供的本机工具/实用程序。 对于oracle,最合适的是SQL Loader。在

有关快速教程,请参阅此链接 http://www.thegeekstuff.com/2012/06/oracle-sqlldr/

这里是…运行SQL加载器并返回返回代码、输出和错误的示例代码

sql_ld_command = ['sqlldr ',  'uid/passwd', 'CONTROL=', 
'your_ctrl_file_path', 'DATA=', 'your_data_file_path']   

sql_ldr_proc  = subprocess.Popen(sql_ld_command, stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)   

out, err  = sql_ldr_proc.communicate()  
retn_code = sql_ldr_proc.wait()

Excel还提供了ODBC支持,因此如果您有驱动程序,就可以直接从Excel泵送到Oracle。也就是说,任何涉及到在内存中转换大量数据(从Excel内部使用的数据)然后将其传递给DB的操作,其性能可能不如专门的批量操作,后者可以优化以使用更少的内存。使用Python只会为任务添加另一层(Excel到Python再到Oracle),尽管可以将其设置为使用streams。在

如果可以将excel文件导出为CSV,则只需使用sqlldr在db中加载文件

相关问题 更多 >