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 语句发送到服务器,因此它可能不会提高性能不仅仅是将提交移到循环之外。
我是 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 语句发送到服务器,因此它可能不会提高性能不仅仅是将提交移到循环之外。