在许多系统中,事务用于将操作分组在一起,以便它们是原子的——这意味着它们要么全部成功,要么全部失败。然而,Python 本身似乎没有内置对数据库上下文之外的事务的支持
例如我有两个函数如下:
create_user_record(user_record)
create_directory(directory_name)
我想将这些函数包装在一个操作中,如果其中一个函数失败,另一个函数也会失败。我怎样才能实现这个目标?
在 Python 中创建原子函数有多种选择。它们通常被称为交易,通常需要进口。
您可以使用 sqlite3 并将其连接到您的 python3 程序,以开始事务并确保其完成。
您可以使用一堆 Try- except-finally 块来确保整个块已完成,如果没有完成则让它失败。
您可以创建一个手动提交和回滚操作的函数。
这是#2 的示例:
import os
import shutil
class AtomicOperation:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
self.rollback()
else:
self.commit()
def commit(self):
def rollback(self):
def create_user_record(user_record):
pass
def create_directory(directory_name):
os.makedirs(directory_name)
def perform_operations(user_record, directory_name):
with AtomicOperation() as operation:
try:
create_user_record(user_record)
create_directory(directory_name)
except Exception as e:
print(f"Operation failed: {e}")