Python:pyodbc插入SQL列表列表(或类似的批量上传,不使用insertmany)

时间:2016-09-12 16:34:16

标签: python sql insert pyodbc

我的目标是从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'? 谢谢! 亚历

0 个答案:

没有答案