通过Python的jaydebeapi批量插入Oracle数据库

时间:2019-06-19 01:31:26

标签: python oracle jaydebeapi

我想将数据从SQLite3文件批量复制到Oracle DB,并使用jaydebeapi模块从Python脚本内以编程方式进行复制。 (我无法选择使用Python + jaydebeapi来执行此操作;这是由我正在参与的项目强加的。)

一种方法是将SQLite3表转储到临时CSV文件中,然后使用Oracle的LOAD DATA INFILE命令读取CSV文件。

我正在寻找一种实现相同最终结果的方法,以避免创建中间临时文件。

更具体地说,由于我可以将SQLite3表批量读取到内存中(使用简单的SELECT语句),因此我需要的是批量写入副本,以将表从内存中转储到Or​​acle数据库中。


编辑:这是一项经常性任务。要复制的最大表通常有约10万行。

2 个答案:

答案 0 :(得分:1)

由于这是两个不同的“数据库”,因此您可能需要连接到SQLLite来执行查询,并且需要连接到Oracle DB来执行插入。

从Python应用程序插入Oracle DB时,应使用cx_Oracle模块的executemany()方法:

data = [
    (60, "Parent 60"),
    (70, "Parent 70"),
    (80, "Parent 80"),
    (90, "Parent 90"),
    (100, "Parent 100")
]

cursor.executemany("""
        insert into ParentTable (ParentId, Description)
        values (:1, :2)""", data)

请参见https://blogs.oracle.com/opal/efficient-and-scalable-batch-statement-execution-in-python-cx_oracle

答案 1 :(得分:0)

SQLite3和Oracle DB表是否具有相同的架构?如果这样做,那么您可以尝试与该伪代码等效的简单操作

for table in sqlite3tables:
    (SELECT * FROM table)  ->  temptable
    for row in temptable
        INSERT row INTO oracletable

如果不同的数据库具有不同的架构,那么您将需要以更定制的方式编写SELECT语句。

无论哪种情况,阅读https://www.python.org/dev/peps/pep-0249/处的Python数据库API文档对于帮助编写解决方案都是非常有用的。