我有一个类似下面的函数,我想用它来计算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)
答案 0 :(得分:1)
sqlite3数据库文件,可以同时被许多不同的读者读取。使用sqlite3在这方面并发没有问题。 sqlite3本身的问题涉及写入文件,只允许一个编写器。
所以,如果你只读了你的罚款。
如果您计划锁定数据库并使其成功,则在计算哈希值时,您将成为具有独占访问权限的编写者。