我正在使用sqlalchemy-aurora-data-api连接到 aurora-postgresql-serverless,并将 SQLalchemy 作为 ORM。
在大多数情况下,这一直运行良好,但我在提交期间不断遇到来自 aurora_data_api(构建 sqlalchemy-aurora-data-api)的意外错误。
我试图通过捕获异常并重试来在应用程序逻辑中处理这个问题,但是,这仍然失败:
from aurora_data_api.exceptions import DatabaseError
from botocore.exceptions import ClientError
def handle_invalid_transaction_id(func):
retries = 3
@wraps(func)
def inner(*args, **kwargs):
for i in range(retries):
try:
return func(*args, **kwargs)
except (DatabaseError, ClientError):
if i != retries:
# The aim here is to try and force a new transaction
# If an error occurs and retry
db.session.close()
else:
raise
return inner
然后在我的模型中做这样的事情:
class MyModel(db.Model):
@classmethod
@handle_invalid_transaction_id
def create(cls, **kwargs):
instance = cls(**kwargs)
db.session.add(instance)
db.session.commit()
db.session.close()
return kwargs
但是,我不断遇到不可预测的事务失败:
DatabaseError: (aurora_data_api.exceptions.DatabaseError) An error occurred (BadRequestException) when calling the ExecuteStatement operation: Transaction AXwQlogMJsPZgyUXCYFg9gUq4/I9FBEUy1zjMTzdZriEuBCF44s+wMX7+aAnyyJH/6arYcHxbCLW73WE8oRYsPMN17MOrqWfUdxkZRBrM/vBUfrP8FKv6Phfr6kK6o7/0mirCtRJUxDQAQPotaeP+hHj6/IOGUCaOnodt4M3015c0dAycuqhsy4= is not found [+26ms]
值得注意的是,这些不是特别长时间运行的事务,所以我认为我没有遇到 aurora-serverless 可能出现的事务过期问题,如此处所述。
我的处理方法是否存在根本性的问题,或者是否有更好的方法来处理发生的交易失败?