如何用pyhdb在一个表中插入很多行?

问题描述 投票:0回答:2

在pyhdb中,是否可以用一次查询就能在表中插入很多行?因为当我有几百万条记录要插入时,在循环中插入每条记录的效率不是很高。

python sap
2个回答
2
投票

在pyhdb中,cursors支持普通的executemany()语句,如Python DB API规范中所述(https:/www.python.orgdevpepspep-0249)--这种方式可以做批量插入。

你试过吗?


0
投票

在@ralhei的回答基础上。pyhdb.cursor.executemany() 允许一个SQL语句和一个参数列表。所以如果你有一个三列表 t1你可以这样插入行

import pyhdb

# Open connection
connection = pyhdb.connect(
    host="example.com",
    port=30015,
    user="user",
    password="secret"
)
cursor = connection.cursor()

# Write data
parameters = [
  (1, 2, "3"),
  (4, 5, "6"),
]
query = 'INSERT INTO schema.t1 VALUES (?, ?, ?)'
cursor.executemany(query, parameters)

但参数必须有一个已知的长度,所以不能使用生成器表达式。如果您的计算机无法在内存中保存整个列表,或者您的参数列表比HANA能够接收的大,这可能是一个问题!在这种情况下,您应该像这样分批插入。在这种情况下,你应该像这样分批插入。

# Helper function
def iter_chunks(iterator, chunk_size):
    """Split iterator into chucks

    https://stackoverflow.com/a/312466/6068036
    """
    res = []
    for item in iterator:
        res.append(item)
        if len(res) >= chunk_size:
            yield res
            res = []
    if res:
        yield res  # yield the last, incomplete, portion

# Write data
parameters = ...  # a generator expression or other Iterator
chunk_size = 1000
for chunk in iter_chunks(parameters, chunk_size):
  cursor.executemany(query, chunk)
© www.soinside.com 2019 - 2024. All rights reserved.