我是续集世界的新手。假设我需要运行一个像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')
?
答案 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
。