python - 当 sqlite3 数据库写入中断时会发生什么?

标签 python sqlite

问题:实际写入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/

相关文章:

Python-将边列表转换为邻接矩阵

Android MVP + Google Dagger 2 + SQLite

android - 在线程中进行任何数据库操作可以吗?

c++ - sqlite编译语句什么时候得到 'executed'

python - 学习高级或晦涩的python概念的好资源?

python - 如何放置多个@paginate Turbogears 2?

Android 2.2 + SQLite + 定义参照完整性约束

php - SQLite错误 ")"右括号

python - 如何在从python中的动态输入中删除重复项的同时合并两个列表

python - Scrapy:在输出中保留已抓取项目的原始顺序