如何使用pyhdb将多行插入表中?

时间:2015-11-04 05:15:03

标签: python sap

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

2 个答案:

答案 0 :(得分:1)

在pyhdb游标中,支持Python DB API规范(https://www.python.org/dev/peps/pep-0249/)中描述的普通executemany()语句 - 这种方式可以做批量插入。

你试过这个吗?

答案 1 :(得分: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)