2024-04-17 23:27:59 发布
网友
这是一个示例列表(每行都有变量元素):
['1', 'Tech', 'Code'] ['2', 'Edu'] ['3', 'Money', 'Sum', '176']
我必须将它插入到一个MySQL表中,该表有4列(列表中一个值的最大元素数)。在
如何有效地做到这一点?我觉得我的解决方案效率最低!在
我的解决方案是:
您应该使用executemany来加速数据库方面的工作。此外,还可以缓存填充列表,这样就不必每次都创建它:
executemany
values = [] padding = [None] * 4 for line in mylistings: values.append((line + padding)[:4]) cursor.executemany("INSERT INTO LoadData VALUES (%s, %s, %s, %s)", values)
您还可以使用itertools,这样就根本不需要构造填充列表:
itertools
根据我的测试,使用tuple(islice(chain(line, padding), 4))大约比(line + padding)[:4]快5%50%。在
tuple(islice(chain(line, padding), 4))
(line + padding)[:4]
编辑:我忘了字符串替换需要元组或列表,而添加元组包装器大大降低了第二种解决方案的速度。但第一个仍然有效!在
这个怎么样?在
for line in mylistings: out = line + [None] * (4 - len(line)) # pad the list with None to 4 elements cursor.execute("INSERT INTO LoadData VALUES (%s, %s, %s, %s)", out)
您应该使用
executemany
来加速数据库方面的工作。此外,还可以缓存填充列表,这样就不必每次都创建它:您还可以使用
^{pr2}$itertools
,这样就根本不需要构造填充列表:根据我的测试,使用
tuple(islice(chain(line, padding), 4))
大约比(line + padding)[:4]
快5%50%。在编辑:我忘了字符串替换需要元组或列表,而添加元组包装器大大降低了第二种解决方案的速度。但第一个仍然有效!在
这个怎么样?在
相关问题 更多 >
编程相关推荐