0

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

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

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

更具体地说,由于我可以将 SQLite3 表批量读取到内存中(使用简单的SELECT语句),我需要的是批量写入对应项,以便将表从内存转储到 Oracle 数据库中。


编辑:这是一个经常性的任务。要复制的最大表通常有 ~100K 行。

4

2 回答 2

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

于 2019-06-19T22:31:37.533 回答
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 文档对于帮助编写解决方案都非常有用。

于 2019-06-19T03:38:27.380 回答