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固有的问题与写入文件有关,只允许一个写入程序。
所以如果你只看你的罚款。
如果计划锁定数据库并成功执行该操作,则在计算哈希值时,您将成为具有独占访问权的编写器。