如何在不造成损害的情况下计算 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 数据库的结构