如何使用SQLite数据库在Sequelize中连接列

时间:2017-01-15 18:14:02

标签: sqlite express sequelize.js

我正在使用Sequelize进行一项我正在进行的快速项目 在一个查询中,我想检索两列的连接结果。

像:

SELECT first_name || ' ' || last_name AS full_name FROM table

我尝试了以下语法并收到错误

router.get('/persons', function(req, res, next) {
  models.Person.findAll({
    attributes: [models.sequelize.fn('CONCAT', 'first_name', 'last_name')]
  })
    .then(function(persons) {
      res.send(persons);
    });
});

错误消息:

SELECT CONCAT('first_name', 'last_name') FROM `Persons` AS `Person`;
Possibly unhandled SequelizeDatabaseError: Error: SQLITE_ERROR: no such function: CONCAT

4 个答案:

答案 0 :(得分:2)

我使用了models.sequelize.literal,它创建了一个表示文字的对象, 在嵌套数组中给它一个别名。

结果:

router.get('/persons', function(req, res, next) {
  models.Person.findAll({
    attributes: [models.sequelize.literal("first_name || ' ' || last_name"), 'full_name']
  })
    .then(function(persons) {
      res.send(persons);
    });
});

答案 1 :(得分:1)

重构到ES6并等待异步

const {fn, col } = models.sequelize
const { Person } = models

router.get('/persons', async(req, res, next) => {
  try { 
      const persons = await Person.findAll({
        attributes: [fn('CONCAT', col('first_name'), ' ', col('last_name'))]
      })
      res.send(persons);
  } catch (err) {
      next(err)
  }
});

答案 2 :(得分:0)

希望这会有所帮助。

router.get('/persons', function(req, res, next) {
  models.Person.findAll({
    attributes: [models.sequelize.fn('CONCAT', models.sequelize('first_name'), ' ', models.sequelize('last_name'))]
  })
    .then(function(persons) {
      res.send(persons);
    });
});

答案 3 :(得分:0)

我遇到了同样的问题,我是这样解决的

const { fn, col } = Person.sequelize;

const res = Person.findAll({
   attributes: [ [fn('concat', col('first_name'), ' ', col('last_name')), "FullName"], ...OthersColumns ]
})

希望能帮到你或其他人