Python SQL单一提交与多重提交

时间:2017-04-18 12:45:50

标签: python sql insert pypyodbc

我是Python的新手,所以我一直在用我发现的脚本一起编写脚本并且它一直很顺利(即使我们的脚本不是最优雅或正确的,我的脚本也在工作)。我的最终目标是获取csv,读取它,找到一个阶段,然后如果找到该短语,则将该行写入SQL数据库。我有这个工作,但我的问题是:

我应该在.execute()的每个循环内写.commit()然后with(我现在正在做什么)?或者我应该在最后构建一个语句并执行/ commit(不确定如何执行此操作)?我通读了this post,我看到了如何格式化插入,但不知道如何获取我的代码(如下)并调整以构建具有多个值的单个插入。任何帮助或建议是第一种方法就好或正确的方法是第二种方法会很棒!提前谢谢!

背景:我正在使用pypyodbc和VM。 python脚本与SQL Express数据库位于同一个VM上。

这是我的代码:

with open(CSVFILE, 'rt', encoding='utf8') as f:
    if debug:
        print('Inside the with')
    reader = csv.reader(f, delimiter=',')
    columns = next(reader)
    query = 'insert into TABLENAME ({0}) values ({1})'
    query = query.format(','.join(columns), ','.join('?' * len(columns)))
    for row in reader:
         for field in row:
             if data.strSearch in field:
                 if debug:
                     print('Found: {}'.format(row[0]))
                 cursor.execute(query, row)
                 cursor.commit()

1 个答案:

答案 0 :(得分:1)

你这样做的方式看起来很好,虽然你可以.commit()移到循环之外,所以你最后只做一次提交。那可能会快一点。

关于将行添加到List然后使用.executemany的建议,这种方法几乎总是导致单独的INSERT语句被发送到服务器,所以它可能不会提高任何性能不仅仅是在循环之外移动提交。