我应该在while循环内部还是外部提交我的数据库?

时间:2017-10-05 15:34:07

标签: python database postgresql performance psycopg2

我有这样的事情:

# pseudo code
while True:
   result = make_request_for_data(my_http_request)
   query = "INSERT INTO my_table (col1, col2) VALUES (%s, %s);"

   for data in result:
       cursor.execute(query, data)

   connection.commit() # should this be inside while loop or outside?

   if result is None:  # some breaking mechanism
       break

cursor.close()
connection.close()

是否有性能优势?为什么?我会做一些时间但是想知道为什么一个比另一个好,如果是这样的话。

1 个答案:

答案 0 :(得分:2)

这取决于它取决于什么比性能更重要。问问自己:

  

整个循环是单个原子业务操作,还是循环的每次迭代都是单个原子业务操作?

也就是说,假设您循环了10条记录,而记录#5以某种方式失败。 1-4还应该承诺吗?如果是这样,请在循环内部提交。如果没有,请在循环外部提交。

更改提交数据的位置确实会影响性能,但更重要的是它会影响正在实施的系统的逻辑。