问题:实际写入sqlite3 db文件的时间是什么时候,如果被中断会怎样?
信息:
我在 python 中有这个程序,我已经工作了几个星期,它使用 sqlite3 来存储来自它正在运行的模拟的大量数据。但是有两种情况我很担心。
我们最近遇到了很多雷暴,这已经停电了几次,我也在更新以一定频率写入数据库的文件,为此我必须终止当前正在运行的模拟线程。在这两种情况下,尤其是前者,我担心当该线程被中断时会发生什么。如果我在它从日志文件写入数据库时碰巧中断它或断电怎么办?信息不会到达那里吗?它会到达那里但腐败吗?它会破坏整个 sqlite3 db 文件吗?
基本上我想知道数据何时真正写入文件而不仅仅是日志文件。如果这个写入过程由于任何原因没有完成,日志和数据库文件会发生什么?
~n
最佳答案
SQLite 使用 atomic commits ,所以要么全部提交,要么什么都不提交。
如果您担心数据库处于无效状态,您需要确保将整个“过渡”状态包装在 BEGIN TRANSACTION ... COMMIT
中。 block 。
写入日志文件等(包括通过失败)的详细信息在文档 "File Locking and Concurrency in SQLite Version 3" 中。 .
关于python - 当 sqlite3 数据库写入中断时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134279/