我想将数据从SQLite3文件批量复制到Oracle DB,并使用jaydebeapi
模块从Python脚本内以编程方式进行复制。 (我无法选择使用Python + jaydebeapi来执行此操作;这是由我正在参与的项目强加的。)
一种方法是将SQLite3表转储到临时CSV文件中,然后使用Oracle的LOAD DATA INFILE
命令读取CSV文件。
我正在寻找一种实现相同最终结果的方法,以避免创建中间临时文件。
更具体地说,由于我可以将SQLite3表批量读取到内存中(使用简单的SELECT
语句),因此我需要的是批量写入副本,以将表从内存中转储到Oracle数据库中。
编辑:这是一项经常性任务。要复制的最大表通常有约10万行。
答案 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文档对于帮助编写解决方案都是非常有用的。