Python SQL 单次提交与多次提交

Python SQL Single Commit vs Multiple Commit In With

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

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

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

这是我的代码:

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()

尽管您可以.commit() 移到循环之外,但您的操作方式看起来不错,因此您只在最后执行一次提交。那可能会快一点。

至于将行添加到列表然后使用 .executemany 的建议,该方法几乎总是导致将单独的 INSERT 语句发送到服务器,因此它可能不会提高性能不仅仅是将提交移到循环之外。