我使用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)发生错误(BadRequestException)调用ExecuteStatement操作时:未找到事务AXwQlogMJsPZgyUXCYFg9gUq4/i9fbeuy1zjmtzzrieubcf44s+wMX7+aAnyyJH/6arychxbclw73we8oryspn17morqwfudxkzrbrm/vbufrp8fkv6phfr6kkk6o7/0mirctrjqaqpotaep+hHj6/ioguacondt4m3015c0c0daycuqhsy4=未找到[+26ms]
值得注意的是,这些不是特别长时间运行的事务,因此我不认为我遇到了aurora serverless中可能出现的事务到期问题,如文件所述here
我的方法是否存在根本性的错误,或者是否有更好的方法来处理发生的事务失败
为了解决这个问题,为了防止对其他人有帮助,我们发现问题出在游标here中创建的事务中
我无法回答原因,但我们注意到,尽管数据成功提交,但事务仍在到期。e、 g:
请求1-创建一组事务、写入数据和退出。 请求2-创建一组事务,请求1的一些事务id失败,退出
所以,是的,我认为问题不在于
aurora-data-api
,而在于aurora serverless中的事务管理。最后,我们对repo进行了分叉并进行了重构,这样所有的事情都是通过ExecuteStatment调用来处理的,而不是使用事务。到目前为止,它工作得很好(注意,我们使用的是SQLalchemy,因为事务是在ORM级别处理的)相关问题 更多 >
编程相关推荐