关于python:如何在不造成损害的情况下计算sqlite数据库文件的散列值

How to compute a hash of a sqlite database file without causing harm

我有一个像下面这样的函数,我想用它来计算一个sqlite数据库文件的散列值,以便将它与我上次为检测任何更改而进行的备份进行比较。

1
2
3
4
5
6
7
8
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()

我计划锁定数据库,这样在我计算散列值的时候就没有人可以写入它了。我这样做有没有可能造成伤害?

1
2
3
4
5
6
// 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)

sqlite3数据库文件可以同时被许多不同的读卡器读取。在这方面,与sqlite3的并发性没有问题。sqlite3固有的问题与写入文件有关,只允许一个写入程序。

所以如果你只看你的罚款。

如果计划锁定数据库并成功执行该操作,则在计算哈希值时,您将成为具有独占访问权的编写器。