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

2024-04-25 12:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是从SQL表中提取一列(1mn行),用python进行一些计算,然后将其插入到SQL中的另一个表中。当前代码执行逐行计算和逐行插入SQL。100000行需要180秒(有人告诉我这很慢)。我要一次插入一百万行。我在这里搜索,找到了很多没有用的解决方案。我在研究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()

错误:

^{pr2}$

我是一个pythonnoob,所以我对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()

我有两个问题: -一次在SQL中插入一百万行的最佳方法是什么? -如何使我的解决方案更“Python”? 谢谢您! 亚历克斯


Tags: executesqlargs解决方案conntempsbinsert