如何用Python在Oracle数据库中插入100万行?

2024-09-28 22:36:47 发布

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

我有大约100000到1000000行要插入Oracle18c数据库。我对甲骨文和这种数量级的数据还是比较陌生的。我想一定有一些最佳的方法来实现这一点,但目前我只设法实现了逐行插入:

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文件中读取数据。在


Tags: 数据方法数据库sqlnamescolumnconnectioncursor
3条回答

就性能和简单性而言,最理想的方法是在CSV文件上创建一个外部表,然后使用SQL进行插入。在

如果数据已经在Python中,那么使用^{}。在有这么多行的情况下,您可能仍然会执行多个调用来插入成批的记录。见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)

正如其他人指出的那样

  • 避免在语句中使用字符串插值,因为这有安全风险。 这通常也是一个可伸缩性问题。使用绑定变量。如果需要对列名等内容使用字符串插值,请确保对所有值进行santize。在
  • 如果数据已经在磁盘上,那么使用SQL*Loader或data Pump之类的方法会比将数据读入cx Oracle然后发送到数据库要好。在

我不知道数据的格式,但是SQL Data Loader是一个专门为向Oracle添加大量数据而创建的命令行实用程序。在

相关问题 更多 >