sequelize.query() 两次返回相同的结果

Posted

技术标签:

【中文标题】sequelize.query() 两次返回相同的结果【英文标题】:sequelize.query() returns same result twice 【发布时间】:2016-01-18 20:19:18 【问题描述】:

我在 nodejs 项目中工作,使用 sequelize 连接 mysql 数据库。我还使用sequelize-values 从 Sequelize 实例中获取原始数据。

我已经写了下面的代码

var Sequelize = require('sequelize');
require('sequelize-values')(Sequelize);
var sequelizeObj = new Sequelize('mysql://root:@localhost/database');

sequelizeObj.authenticate().then(function (errors) 
    console.log(errors)
);

sequelizeObj.query("SELECT * FROM `reports` WHERE `id` = 1200").then(function (result) 

    );

现在reports 表只有一条记录id 1200,但是result 给出了相同记录的两个对象,这意味着这两个记录都是相同的 id 1200。

[ [  id: 1200,
  productivity_id: 9969,
  gross_percentage_points: 100  ],
[  id: 1200,
  productivity_id: 9969,
  gross_percentage_points: 100  ] ]

让我知道我做错了什么?

【问题讨论】:

【参考方案1】:

第一个对象是结果对象,第二个是元数据对象(包含受影响的行等)——但在 mysql 中,这两个是相等的。

传递 type: Sequelize.QueryTypes.SELECT 作为第二个参数会给你一个结果对象(元数据对象省略

https://github.com/sequelize/sequelize/wiki/Upgrading-to-2.0#changes-to-raw-query

【讨论】:

const QueryTypes = require('sequelize'); var queryString = "从用户中选择 id"; const userList = await Sequelize.query(queryString, type: QueryTypes.SELECT );【参考方案2】:

试试看:

sequelizeObj.query("SELECT * FROM `reports` WHERE `id` = 1200",  type: Sequelize.QueryTypes.SELECT ).then(function (result) 
    );

【讨论】:

【参考方案3】:

添加 type: Sequelize.QueryTypes.SELECT 作为第二个参数,也记得先导入Sequelize。

【讨论】:

【参考方案4】:

已解决

sequelize.query("SELECT ...",  type: Sequelize.SELECT )
.then(result => 
    if (!result ) 
        res.status(404).send( message: "Data Not found." );
    

    res.status(200).send(result[0]);

)
.catch(err => 
    res.status(500).send( message: err.message );
);

【讨论】:

以上是关于sequelize.query() 两次返回相同的结果的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize Query FindAll 不过滤

为啥 alloca 两次返回相同的地址?

节点Js将原始查询续集为sequelize ORM

Haskell检查函数是不是两次返回相同的值

两次密码错误如何返回相同状态

停止 SQL 在 JOIN 中两次返回相同的结果