是否可以使用pyhdb中的一个查询在表中插入多行?因为当我要插入数百万条记录时,在循环中插入每条记录效率不高。
答案 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)