我的目标是从SQL表中获取一列(1百万行),在python中进行一些计算并将其插入SQL中的另一个表中。当前代码逐行计算并逐行插入SQL。 100,000行需要180秒(我被告知速度很慢)。我希望单行插入1mn行。我在这里搜索并找到了许多无效的解决方案。我在Python2.7上工作。
解决方案1无效:
args = [['a','b','1'],['c','d','2'],['e','f','3']]
temp = ['%s','%s','%s']
numRows = 3
InsertSQL = "INSERT INTO SB.Temp VALUES" + ','.join(['('+','.join(temp)+')']*numRows)
c.execute(InsertSQL,args)
conn.commit()
错误:
ProgrammingError: ('The SQL contains 0 parameter markers,
but 3 parameters were supplied', 'HY000')
我是一个python NOOB,所以我复制了SQL所需的字符串,并提出了这个有效的解决方案,但它并不优雅。
def itworks():
args = [['a','b','1'],['c','d','2'],['e','f','3']]
nargs = []
for i in args:
nargs.append("('{}', '{}', {})".format(i[0],i[1],i[2]))
nargs = ','.join(nargs)
c.execute ("INSERT INTO SB.Temp VALUES {}".format(nargs))
conn.commit()
我有两个问题: - 一次性将100万行插入SQL的最有效方法是什么? - 如何使我的解决方案更多' pythony'? 谢谢! 亚历