问题:什么时候对sqlite3 db文件进行实际写入?如果它被中断会发生什么?
的信息:
我在python中有这个程序,我已经工作了几个星期,使用sqlite3来存储正在运行的模拟中的大量数据。但是有两种情况我担心。
我们最近一直有很多雷暴,这已经淘汰了几次电源,我也在更新以某种频率写入数据库的文件,并且这样做我必须杀死当前运行的模拟的线程。在这两种情况下,特别是前者,我担心当这个线程被中断时会发生什么。如果我在从日志文件写入数据库时发生中断或断电,该怎么办?信息会不会到达那里?它会到达但腐败吗?它会破坏整个sqlite3 db文件吗?
基本上我想知道数据何时实际写入文件而不仅仅是日志文件。如果这个写入过程因任何原因没有完成,那么日志和db文件会发生什么?
〜n的
答案 0 :(得分:4)
SQLite使用atomic commits,因此无论是一切还是全部都没有提交。
如果您担心数据库处于无效状态,则需要确保将整个“过渡”状态包装在BEGIN TRANSACTION ... COMMIT
块中。
撰写期刊文件等的详细信息(包括通过失败)在文档"File Locking and Concurrency in SQLite Version 3"中。