我正在尝试更新 Node.js 应用程序中的数据。我和邮递员测试过。
我的开发步骤是:
从数据库(MySQL)获取ID为10的数据进行更新>>未处理的拒绝SequelizeDatabaseError:查询为空
我认识到,我使用了错误的 ID,所以我更改为正确的 ID:50 >> 其他一些错误
- 好的,我修复了与我的不准确工作相关的其他一些错误,并使用良好的 id:50 >> 未处理的拒绝 SequelizeDatabaseError:未处理的拒绝 SequelizeDatabaseError:查询为空
- 奇怪的行为,因为这个 id 之前很好...(在第 3 步中)好的,我只是将 id 更改为其他正确的: 51 >> 一些其他错误
- 好的,我修复了另一个错误,使用新的 id 再次尝试更新:51 >> 未处理的拒绝 SequelizeDatabaseError:查询为空
在我看来,我只能一次获得有效数据,在我无法到达之后......
完整的堆栈跟踪:
Unhandled rejection SequelizeDatabaseError: Query was empty
at Query.formatError (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\sequelize\lib\dialects\mysql\query.js:223:16)
at Query.connection.query [as onResult] (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\sequelize\lib\dialects\mysql\query.js:55:23)
at Query.Command.execute (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\commands\command.js:30:12)
at Connection.handlePacket (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:515:28)
at PacketParser.onPacket (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:94:16)
at PacketParser.executeStart (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\packet_parser.js:77:14)
at Socket.<anonymous> (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:102:29)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:547:20
Ideas?
Note
我的问题与模型数据库同步无关。这些是同步的,因为我有一个案例 - 第一次调用 - 当我可以更新对象时!但是如果我测试该 id 两次、第三次等...我会收到此错误。因此,如果这些不同步,那么我也无法在第一时间更新对象
UPDATE
经过一天的摸索,我才发现,第二次和第三次续集做了空的 SQL 查询。下面是代码片段:
好的 SQL 更新:
Executing (default): UPDATE `cardModules` SET `field1`='xxxxxxxx',`field2`='xxxxxxxxxx',`field3`='MEDIUM',`field4`=false,`field5`=false WHERE `id` = 43
错误的 SQL 更新:
Executing (default):
问题是:为什么要这样做 Sequelize?
为了让大家了解更多how/why这种情况可能会发生:通常,Sequelize 会跟踪模型的更改,然后当您调用 model.save() 时,它只会尝试更新已更改的 SQL 列。
let person = async Employee.findOne();
person.name = "Jerry Jones";
person.save(); //All good here, and only the name column will be updated
如果没有属性发生更改,它甚至不会尝试进行 SQL 调用
let person = async Employee.findOne();
person.save(); //No errors, but no SQL call will be made
但是,任何设置为“未定义”值(与 null 不同!)的属性仍将导致模型被标记为脏/已更改,但在构造 SQL 调用时将被忽略。因此,如果您仅更改一个属性并将其设置为未定义,Sequelize 仍将尝试进行调用,但查询将为空。
let userUpdates = {age: 99, title: "Developer"};
let person = async Employee.findOne();
person.name = userUpdates.name; //name is undefined, but property will still be considered changed.
person.save(); //Query will be empty!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)