我有大约100,000至1,000,000行要插入到Oracle18c数据库中。我对Oracle和这种数量级的数据非常陌生。我认为必须有一些最佳的方法来完成此操作,但是到目前为止,我仅设法实现了逐行插入:
def insertLines(connection, tableName, column_names, rows):
cursor = connection.cursor()
if tableExists(connection, tableName):
for row in rows:
sql = 'INSERT INTO {} ({}) VALUES ({})'.format(tableName, column_names, row)
cursor.execute(sql)
cursor.close()
Oracle中是否有一些清晰的方法可以使用cx_Oracle(Python Oracle库)将行进行批量处理以提高有效性?
编辑:我从CSV文件中读取数据。
答案 0 :(得分:2)
我不知道您的数据采用哪种格式,但是SQL Data Loader是一个命令行实用程序,专门用于向Oracle添加大量数据。
答案 1 :(得分:1)
如果您的数据已经在Python中,请使用executemany()
。对于有这么多行的情况,您可能仍将执行多次调用以插入一批记录。参见https://blogs.oracle.com/opal/efficient-and-scalable-batch-statement-execution-in-python-cx_oracle
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)
正如其他人所指出的
答案 2 :(得分:1)
就性能和简便性而言,最佳的方法是在CSV文件上创建一个外部表,然后使用SQL进行插入。