gpt4 book ai didi

javascript - sequelizejs 在删除行时保存对象

转载 作者:行者123 更新时间:2023-12-03 22:29:36 24 4
gpt4 key购买 nike

我有以下代码。这个想法是我每隔一段时间更新一个数据库行,但是如果我在此脚本运行时手动从数据库中删除该行,save() 仍然进入成功(),但该行实际上并未放回数据库. (因为 sequelize 使用 where 子句执行更新查询并且没有行匹配。)我希望创建一个新行或调用 error()。我可以做些什么来使这种行为像我想要的那样有什么想法吗?

var Sequelize = require("sequelize") 
, sequelize = new Sequelize('test', 'test', 'test', {logging: false, host: 'localhost'})
, Server = sequelize.import(__dirname + "/models/Servers")

sequelize.sync({force: true}).on('success', function() {
Server
.create({ hostname: 'Sequelize Server 1', ip: '127.0.0.1', port: 0})
.on('success', function(server) {

console.log('Server added to db, going to interval');

setInterval(function() { console.log('timeout reached'); server.port = server.port + 1; server.save().success(function() { console.log('saved ' + server.port) }).error(function(error) { console.log(error); }); }, 1000);


})
})

最佳答案

恐怕你正在尝试做的事情目前不受 sequelize 的支持。
错误回调仅针对实际错误情况,即 SQL 语法错误,诸如此类。尝试更新不存在的行在 SQL 中不是错误。
这里的导入区别在于,您是在程序之外修改数据库。 Sequelize 无法知道这一点!我有两种可能的解决方案,目前只有一种是可行的:
1(现在工作)
使用 sequelize.query 在查询中包含错误处理

IF EXISTS (SELELCT * FROM table WHERE id = 42)
UPDATE table SET port = newport WHERE id = 42
ELSE
INSERT INTO table ... port = newport
或者,您可以在 sequelize github 上为要实现的 INSERT ... ON DUPLICATE KEY UPDATE 语法创建功能请求 seehere
2(将在执行交易时工作
使用事务首先检查该行是否存在,如果不存在则插入它。交易在 Sequelize 的路线图上,但目前不受支持。如果您是 而不是 使用连接池,您可以通过调用 sequelize.query('BEGIN / COMMIT TRANSACTION') 手动完成事务。

关于javascript - sequelizejs 在删除行时保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com