【发布时间】:2019-09-12 02:04:35
【问题描述】:
编辑:请阅读底部的编辑。
我正在使用 sequelize,试图在 mySQL 数据库中查找或创建一行,然后立即对新创建的行进行更新。我的 .update 函数始终返回 [0],即使将已知的现有值硬编码到查询中也是如此。
const importToSqlBI = async (metadataArray, filepath) => {
metadataArray.shift(); // remove the header row
let release;
ReleaseBI.findOrCreate({
where: {
rel_num: metadataArray[0].release
}
}).then(([response, created]) => {
release = JSON.parse(JSON.stringify(response));
let numOnly = release.rel_num.substring(1, 3);
release.rel_num_only = numOnly;
if(created){
updateRelease(release);
}
let z = mapArray(metadataArray, release);
}).catch(err => {
console.log("uploads.js:", 128, err);
});
return "finished";
};
const updateRelease = (release) => {
let z = ReleaseBI.update({...release}, {
where: {
rel_id: release.rel_id
}
}).then((response) => {
return response;
}).catch(err => {
console.log("uploads.js:", 149, err);
});
return z; // this always returns [0], meaning nothing was updated
};
这是续集在控制台中吐出的代码。请注意,查询中从来没有任何值,只有问号(我的对象包含所有正确的值,并且列名使用正确的数据类型拼写正确)。
Executing (default): UPDATE `releases` SET `rel_id`=?,`rel_num`=? WHERE `rel_id` = ?
看起来它甚至没有从传递给查询的对象中获取任何东西。
我做错了什么?
编辑:如果我更改我正在更新的列(从 rel_num_only 到 rel_num),则查询通过。两者都是 SQL 中的有效列,实际上,我使用 auto-sequelize 生成了模型。所以 sequelize 无法识别它自己制作的模型中的列...?
续集模型:
module.exports = function(sequelize, DataTypes) {
return sequelize.define('releases', {
rel_id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
rel_num: {
type: DataTypes.STRING(50),
allowNull: true
},
rel_num_only: {
type: DataTypes.STRING(50),
allowNull: true
}
}, {
tableName: 'releases',
underscored: true,
timestamps: false
});
};
【问题讨论】:
-
updateRelease 方法在它解决承诺之前返回,所以你需要等待解决承诺,你可以使用... await updateRelease(release)
-
@Garry 我不认为这是问题所在,或者至少我尝试过并且问题仍然存在
-
你从哪里得到这个
.update() always returning [0],在哪一行,你在哪里控制台?在您的代码中看不到。 -
@VivekDoshi 其 updateRelease 的返回值。
标签: node.js sequelize.js