【发布时间】:2019-07-25 03:18:55
【问题描述】:
我想用一个插入语句插入多行。
我试过了
params = ((1, 2), (3,4), (5,6))
sql = 'insert into tablename (column_name1, column_name2) values (?, ?)'
cursor.fast_executemany = True
cursor.executemany(sql, params)
但它是参数上的简单循环,在后台运行执行方法。
我还尝试创建更长的插入语句,就像 INSERT INTO tablename (col1, col2) VALUES (?,?), (?,?)...(?,?)。
def flat_map_list_of_tuples(list_of_tuples):
return [element for tupl in list_of_tuples for element in tupl])
args_str = ', '.join('(?,?)' for x in params)
sql = 'insert into tablename (column_name1, column_name2) values'
db.cursor.execute(sql_template + args_str, flat_map_list_of_tuples(params))
它成功了,并且将插入时间从 10.9 秒缩短到了 6.1 秒。
这个解决方案正确吗?它有一些漏洞吗?
【问题讨论】:
-
"但是 [executemany 是一个] 参数上的简单循环,在后台运行执行方法" - 使用 pyodbc 和
fast_executemany = True不一定是这种情况;它取决于 ODBC 驱动程序。您使用的是哪个 ODBC 驱动程序? -
适用于 SQL Server 的 ODBC 驱动程序 17
标签: python sql-server pyodbc