postgresql - sequelize.query 返回空数组

标签 postgresql sequelize.js

使用 Sequelize 4.38.1 PostgreSQL 10.5 ,我有以下代码:

const criteria = {
  attended: '2018-09-21',
  location: 'Squirrel Hill',
  teacher: 'Doe, John',
  classTitle: 'Yoga 1'
};

const sql = `
  SELECT
    "Attendances"._id,
    "Attendances"."UserId",
    "Users"."lastName" || ', ' || "Users"."firstName" AS name
  FROM
    "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
  WHERE
    "Attendances".attended = :attended AND
    "Attendances".location = :location AND
    "Attendances".teacher = :teacher AND
    "Attendances"."classTitle" = :classTitle
  ORDER BY "Users"."lastName", "Users"."firstName";`;

  sequelize.query(
    sql,
    {
      replacements: criteria,
      type: sequelize.QueryTypes.SELECT
    })
    .then(attendeeList => {
      console.log(attendeeList);
      return res.status(200).json(attendeeList);
    })

打开 sequelize 日志记录后,我的查询将正确地参数化为替换并执行:
SELECT
      "Attendances"._id,
      "Attendances"."UserId",
      "Users"."lastName" || ', ' || "Users"."firstName" AS name
    FROM
      "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
    WHERE
      "Attendances".attended = '2018-09-21' AND
      "Attendances".location = 'Squirrel Hill' AND
      "Attendances".teacher = 'Doe, John' AND
      "Attendances"."classTitle" = 'Yoga 1'
    ORDER BY "Users"."lastName", "Users"."firstName";

问题:我的结果(attendeeList)作为 [] 返回。当我使用 pgAdmin 运行相同的查询时,我得到一行:
_id UserId  name
40  24601   "Doe, John"

有人对我做错了什么有任何想法吗?

最佳答案

我将上面的示例作为 Sequelize 的 Github 存储库上的问题提交,因为我能够使其与不包含 INNER JOIN 的查询一起使用。

对于我的情况, pg-native 更合适(考虑在其他地方撕掉 Sequelize ,因为它更慢)...

const client = new PGNativeClient();
  client.connect(config.sequelize.uri, err => {
    if(err) {
      res.status(401).json({ message: 'Not able to connect to database to get list of attendees.' });
      return;
    }
    const sql = `
      SELECT
        "Attendances"._id,
        "Attendances"."UserId",
        "Users"."lastName" || ', ' || "Users"."firstName" AS name
      FROM
        "Attendances" INNER JOIN "Users" ON "Attendances"."UserId" = "Users"._id
      WHERE
        "Attendances".attended = $1::DATE AND
        "Attendances".location = $2 AND
        "Attendances".teacher = $3 AND
        "Attendances"."classTitle" = $4
      ORDER BY "Users"."lastName", "Users"."firstName";`;
    const { attended, location, teacher, classTitle } = req.query;
    client.query(sql, [attended, location, teacher, classTitle], (err, rows) => {
      if(err) {
        res.status(424).json({ message: 'Not able to retrieve attendees from database (but connected successfully).' });
        return;
      }
      res.status(200).json(rows);
    });

关于postgresql - sequelize.query 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52472342/

相关文章:

python - 将表数据从django postgres模型推送到远程oracle数据库

c++ - SOCI(SQL C++ 包装器)- PostgreSQL 不执行命令(?)

postgresql - 我在哪里可以获得 PostgreSQL 的截屏视频?

sequelize.js - Sequelize 更新 JSONB 中的嵌套属性

orm - sequelize - 如何返回普通对象

sql - 返回由一个列 id 聚合并数据对齐到另一个列 id 的数据

node.js - 我如何在 node js sequelize 中编写此查询

mysql - 无法从已部署的 Kubernetes NodeJS 应用程序连接到 Google MySQL

node.js - config.use_env_variable、Object.keys 和 readdirSync 如何在 node js 代码中查找模型有用?

sql - 如何在 PostgreSQL 中选择某一年之后的日期