当sqlite3 db写入被中断时会发生什么?

时间:2010-06-28 16:36:18

标签: python sqlite

问题:什么时候对sqlite3 db文件进行实际写入?如果它被中断会发生什么?


的信息:

我在python中有这个程序,我已经工作了几个星期,使用sqlite3来存储正在运行的模拟中的大量数据。但是有两种情况我担心。

我们最近一直有很多雷暴,这已经淘汰了几次电源,我也在更新以某种频率写入数据库的文件,并且这样做我必须杀死当前运行的模拟的线程。在这两种情况下,特别是前者,我担心当这个线程被中断时会发生什么。如果我在从日志文件写入数据库时​​发生中断或断电,该怎么办?信息会不会到达那里?它会到达但腐败吗?它会破坏整个sqlite3 db文件吗?

基本上我想知道数据何时实际写入文件而不仅仅是日志文件。如果这个写入过程因任何原因没有完成,那么日志和db文件会发生什么?

〜n的

1 个答案:

答案 0 :(得分:4)

SQLite使用atomic commits,因此无论是一切还是全部都没有提交。

如果您担心数据库处于无效状态,则需要确保将整个“过渡”状态包装在BEGIN TRANSACTION ... COMMIT块中。

撰写期刊文件等的详细信息(包括通过失败)在文档"File Locking and Concurrency in SQLite Version 3"中。