哪一个是提交的首选方式?那两种方法内部究竟发生了什么?
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
for item in items:
cursor2.execute(query3, [some_parameter])
connection1.commit()
答案 0 :(得分:0)
据我所知connection1.commit()
将更改写入数据库。
在第一个例子中,你每次都要提交,这可能需要更长时间,但是更安全" (如果发生崩溃,将有更多数据写入数据库)。
在第二个示例中,您在完成所有更改后写入数据库。因为这只是一次写操作,所以花费的时间会更少,但从技术上来说,它的安全性较低。
在正常环境中,以及简称for循环,我会选择第二个。如果你的代码需要几个小时才能运行,那么第一种方法对你来说可能更好。
答案 1 :(得分:0)
假设您的查询正在修改数据:
第一种方法意味着数据库将在每次迭代时逐项更新(逐项)。第二种方法意味着在完成所有项目后,只有一次更新,包含您所做的所有更改。
第一种方法的潜在问题可能是:
数据不一致如果由于某种原因没有完成迭代周期,那么重要的是要么拥有所有更新,要么都没有;
如果有人在您更新数据集时查询该数据集,则数据不一致;
如果您发送了太多更新请求(特别是如果每个更新请求都锁定了一个或多个表),则会出现拥塞。
第二种方法的潜在问题可能是:
由于一次发送过多数据而导致错误;
其他人可能以不同的方式修改了相同的数据集,然后由于您的更新而丢失了这些更改,这些更新是在早期状态的数据上进行的。根据事务隔离级别,这可能导致数据不一致或您的事务被拒绝。
选择哪种方法取决于具体的用例。
答案 2 :(得分:0)
方法1
方法2
第二种方法类似于批量插入,因为它仅在执行所有查询时提交所有更改。