mysql 序列化更新/保存对表行没有影响

zour9fqk  于 2022-12-10  发布在  Mysql
关注(0)|答案(2)|浏览(88)

我们在AWS上有一个MySQL数据库,我们使用的是带有CDK的lambdas,构建在TypeScrip上。我们在不同的Lambdas上有许多CRUD操作。然而,在一个lambda上,表上的行的更新不起作用。在本地数据库上运行的集成测试运行良好,受影响的行会给出预期的结果。但是,在AWS上运行此用例,调用经过集成测试的确切方法,根本没有任何效果。该操作返回0个受影响的行,并且不会引发任何ValidationError,尽管事务更改了数据字段。我们已经尝试使用Sequelize UPDATE方法和SAVE方法。一个有趣的方面是,如果我们更新旧的字段,更新查询就可以很好地工作。对于全新的油田,更新不起作用。对于本地集成测试数据库和AWS数据库,新字段的数据库迁移运行方式相同。这个团队无法解决这个问题。有什么主意吗?
代码示例:

async function updateMyValuesInUserDb(myParam: string, user: UserDbModel): Promise<void> {
    try {
        const value1 = getValue1(myParam)
        const value2 = getValue2(myParam)
      
        user.myNewField1 = value1
        user.myNewField2 = value2
        await user.save()
}

模型:

@Table({
    tableName: 'User',
    freezeTableName: true
})
export class UserDbModel extends Model {
    @PrimaryKey
    @AutoIncrement
    @Unique
    @Column
    id!: number

    @Column
    username: string

    @Column
    firstName: string

    @Column
    lastName: string

    @IsEmail
    @Unique
    @Column
    email: string

    @Default(false)
    @Column
    myNewField1: boolean

    @AllowNull(true)
    @Default(null)
    @Column
    myNewField2: number

    @UpdatedAt
    @Column
    updatedAt: Date

}
2ledvvac

2ledvvac1#

我怀疑getValue1()getValue2()函数是异步调用,需要应用await关键字,以便运行时将等待Promisesresolve

xu3bshqb

xu3bshqb2#

问题是,尽管集成测试使用的是最新的用户模型,但部署到AWS上的代码使用的是过时的用户模型,这是因为Package.json中的一个包已过时。我们使用符号链接来连接包,而从本地部署应该将符号链接考虑在内。不幸的是,符号链接只适用于集成测试。如果我们打开部署/构建的代码,并搜索新的字段,我们本可以更早地发现这一点。

相关问题