我有这样的事情:
# 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()
是否有性能优势?为什么?我会做一些时间但是想知道为什么一个比另一个好,如果是这样的话。
答案 0 :(得分:2)
这取决于它取决于什么比性能更重要。问问自己:
整个循环是单个原子业务操作,还是循环的每次迭代都是单个原子业务操作?
也就是说,假设您循环了10条记录,而记录#5以某种方式失败。 1-4还应该承诺吗?如果是这样,请在循环内部提交。如果没有,请在循环外部提交。
更改提交数据的位置确实会影响性能,但更重要的是它会影响正在实施的系统的逻辑。