首页 > 解决方案 > PynamoDB TransactWrite 更新抛出 ValidationException

问题描述

我有一个看起来像这样的模型:

class Task(BaseModel):

    Meta = pynamodb_table_meta("my-task")

    creator_id = UnicodeAttribute(null=False)
    metadata = JSONAttribute(default={}, null=False)
    status = UnicodeAttribute(default="new", null=False)
    task_id = UnicodeAttribute(hash_key=True)


class BaseModel(Model):
    created_at = UTCDateTimeAttribute()
    updated_at = UTCDateTimeAttribute()

控制器代码:

try:
            task_to_be_updated = Task(task_id='valid uuid of existing task')
            with TransactWrite(connection=connection) as transaction:
                now = datetime.utcnow()

                transaction.update(
                    task_to_be_updated,
                    actions=[
                        Task.creator_id.set("new uuid")
                        Task.status.set("in_progress"), 
                        Task.updated_at.set(now)
                    ],
                        condition=(Task.status == "new")
                    )
                

        except TransactWriteError as e:
            raise Exception(f"Task error {e.cause_response_code}")

transaction.update 总是以 ValidationException 失败。不确定是什么问题。如果有一种方法可以了解 ValidationException 发生在哪里,那会很棒,因为我看到的只是“任务错误 ValidationException”,因此不知道哪个字段导致了问题。

标签: transactionsamazon-dynamodbvalidationexceptionpynamodb

解决方案


推荐阅读