我正在尝试更新nodejs应用程序中的数据。我和 Postman 试过了。
我的发展步骤是:
正在从db(mysql)获取id为10的数据以更新>>未处理的拒绝sequelizedatabaseerror:查询为空
我认出了,我用错了身份证,所以我换了一个正确的one:50 >>其他一些错误
好的,我修复了与我不准确的工作相关的其他错误,并使用good id:50>>unhandled rejection sequelizedabaseerror:unhandled rejection sequelizedabaseerror:query为空
奇怪的行为,因为这个身份证以前很好(在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
思想?
笔记
我的问题与db型同步无关。这些都是同步的,因为我有一个案例-第一次调用-当我可以更新对象!但如果我测试两次,第三次等等。。。我得到了这个错误。因此,如果这些都没有同步,那么我也不能在第一次更新obejct
更新
去块一天后,我才认出,第二次和第三次sequalize做空sql查询。下面是代码片段:
好的sql更新:
Executing (default): UPDATE `cardModules` SET `field1`='xxxxxxxx',`field2`='xxxxxxxxxx',`field3`='MEDIUM',`field4`=false,`field5`=false WHERE `id` = 43
错误的sql更新:
Executing (default):
问题是:为什么Sequalize要这么做?
2条答案
按热度按时间gjmwrych1#
为了更清楚地说明这种情况是如何/为什么发生的:通常,sequelize会跟踪对模型的更改,然后在调用model.save()时,它只会尝试更新已更改的sql列。
如果属性没有改变,它甚至不会尝试进行sql调用
但是,任何设置为“未定义”值的属性(与null不同!)仍将导致模型标记为脏/已更改,但在构造sql调用时将被忽略。因此,如果只更改一个属性并将其设置为“未定义”,sequelize仍将尝试进行调用,但查询将为空。
mspsb9vt2#
我刚意识到问题的小时数。如果sequlize没有发现db值和可更新值之间的任何差异,那么将生成一个空sql字符串并希望执行此操作。因此,由于相同的sequlize抛出的查询是空消息。
因此,如果没有更改,但您希望更新,则会出现此错误。
我处理此问题是为了检查错误消息,如: