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