如何在不造成损害的情况下计算 sqlite 数据库文件的哈希

Posted

技术标签:

【中文标题】如何在不造成损害的情况下计算 sqlite 数据库文件的哈希【英文标题】:How to compute a hash of a sqlite database file without causing harm 【发布时间】:2016-10-08 19:49:55 【问题描述】:

我有一个类似以下的函数,我想用它来计算 sqlite 数据库文件的哈希值,以便将它与我为检测任何更改所做的最后备份进行比较。

def get_hash(file_path): # http://***.com/a/3431838/1391717 hash_sha1 = hashlib.sha1 使用 open(file_path, "rb") 作为 f: 对于 iter(lambda: f.read(4096), b"") 中的块: hash_sha1.update(块) 返回 hash_sha1.hexdigest()

我计划锁定数据库,所以在我计算哈希时没有人可以写入它。我这样做有可能造成任何伤害吗?

// http://codereview.stackexchange.com/questions/78643/create-sqlite-backups 连接 = sqlite3.connect(database_file) 游标 = 连接。游标() cursor.execute("立即开始") db_hash = get_hash(args.database)

【问题讨论】:

【参考方案1】:

sqlite3 数据库文件,可以并且可能被许多不同的阅读器同时读取。在这方面,sqlite3 的并发性没有问题。 sqlite3 固有的问题涉及写入文件,只允许一个写入器。

因此,如果您只阅读罚款。

如果您计划锁定数据库并成功完成此操作,则在计算哈希时,您将成为具有独占访问权限的写入者。

【讨论】:

以上是关于如何在不造成损害的情况下计算 sqlite 数据库文件的哈希的主要内容,如果未能解决你的问题,请参考以下文章

我们能否在不损害其他客户数据的情况下为不同客户使用单个 Azure 事件中心?

如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)

如何在不丢失数据的情况下更改 Core Data SQLite 数据库的结构

在不使用扩展的情况下动态转置 SQLite 中的行

是否可以在不运行 DbVisualizer + SQLite 中的原始 sql 的情况下更改列

如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?