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

时间:2016-10-08 19:49:56

标签: python sqlite

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

def get_hash(file_path):
    # http://stackoverflow.com/a/3431838/1391717
    hash_sha1 = hashlib.sha1
    with open(file_path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_sha1.update(chunk)

    return hash_sha1.hexdigest()

我计划锁定数据库,因此在我计算哈希时没有人可以写入数据库。这样做是否有可能造成伤害?

// http://codereview.stackexchange.com/questions/78643/create-sqlite-backups
connection = sqlite3.connect(database_file)
cursor = connection.cursor()
cursor.execute("begin immediate")

db_hash = get_hash(args.database)

1 个答案:

答案 0 :(得分:1)

sqlite3数据库文件,可以同时被许多不同的读者读取。使用sqlite3在这方面并发没有问题。 sqlite3本身的问题涉及写入文件,只允许一个编写器。

所以,如果你只读了你的罚款。

如果您计划锁定数据库并使其成功,则在计算哈希值时,您将成为具有独占访问权限的编写者。