使用带参数

时间:2017-04-24 10:39:22

标签: sequelize.js

我是续集世界的新手。假设我需要运行一个像postgres这样的查询:

select to_char(column1, 'HH:MM:SS') from table1 where param1 = :param

使用sequelize我必须像这样设置原始查询:

db.sequelize.query(query, { replacements: { param: 'whatever' }, type: db.sequelize.QueryTypes.SELECT }).then((list) => { ... });

我遇到了麻烦,因为冒号字符出现在查询字符串中; sequelize似乎将这些冒号解释为替换。

我是否需要使用任何特殊语法,以便sequelize正确解析字符串to_char(column1, 'HH:MM:SS')

2 个答案:

答案 0 :(得分:1)

希望我不会太迟,但我遇到了同样的问题,我所做的就是将字符串格式放入替代品中。使用您的示例,它将像:

select to_char(column1, :format) from table1 where param1 = :param

和Sequelize部分:

db.sequelize.query(query, { replacements: { param: 'whatever', format: 'HH:MM:SS' }, type: db.sequelize.QueryTypes.SELECT }).then((list) => { ... });

我找不到'正式'的方法,所以这就像一个小迂回的方法。

答案 1 :(得分:0)

也许已经晚了,但对于发现此问题的其他人可能很有用。

我发现的最佳方法是使用“绑定参数”而不是“替换”。 有关详细信息,请检查Sequelize -> Raw queries中的“绑定参数”部分。

以您的示例为例:

const query = `select to_char(column1, 'HH:MM:SS') from table1 where param1 = $param`

db.sequelize.query(query, {
  bind: {
    param: 'whatever'
  },
  type: db.sequelize.QueryTypes.SELECT
}).then((list) => { ... })

这个想法是将:替换为$,并在查询选项中使用bind而不是replacements