在pyhdb中,是否可以用一次查询就能在表中插入很多行?因为当我有几百万条记录要插入时,在循环中插入每条记录的效率不是很高。
在pyhdb中,cursors支持普通的executemany()语句,如Python DB API规范中所述(https:/www.python.orgdevpepspep-0249)--这种方式可以做批量插入。
你试过吗?
在@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)