You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sequelize CLI项目执行PostgreSQL函数

解决Sequelize中调用PostgreSQL函数时"query is not a function"的错误

你这是踩了Sequelize新手常犯的一个小坑——你调用的是Sequelize的类本身,而不是已经实例化、连接好数据库的对象!

问题根源

你之前的代码里:

const sequelize = require('sequelize');
sequelize.query('myfunction')

这里的sequelize是Sequelize的构造函数(也就是类),而query是属于实例化后的Sequelize对象的方法,直接调用类的话自然会报错"query is not a function"。

正确的解决步骤

因为你是用Sequelize CLI创建的项目,项目里已经帮你配置好了连接数据库的Sequelize实例,就在models/index.js文件里,你只需要正确导入它就行:

  1. 导入已配置好的Sequelize实例
// 从models目录导入自动生成的sequelize实例
const { sequelize } = require('./models');
  1. 调用PostgreSQL函数的正确写法
    PostgreSQL里调用函数必须加上(),如果是无参数函数,直接执行SELECT myfunction();就行;如果有参数,建议用参数绑定来避免SQL注入:

无参数函数示例

sequelize.query('SELECT myfunction();')
  .then(([results, metadata]) => {
    // results就是函数返回的数据,metadata是执行元信息
    console.log('函数执行结果:', results);
  })
  .catch(err => {
    console.error('执行失败:', err);
  });

带参数函数示例

const userId = 123;
sequelize.query('SELECT myfunction(:userId);', {
  // 用replacements传递参数,更安全
  replacements: { userId },
  // 指定查询类型,让结果更易处理
  type: sequelize.QueryTypes.SELECT
})
.then(results => {
  console.log('带参数的函数结果:', results);
})
.catch(err => {
  console.error('执行出错:', err);
});

额外提示

  • 如果你的函数是执行数据修改(比如插入、更新),可以不用指定type,或者用QueryTypes.RAW;
  • 确保models/index.js里的数据库连接配置(主机、端口、用户名、密码、数据库名)都是正确的,否则实例无法连接数据库也会报错;
  • 如果你需要自己创建Sequelize实例(而不是用CLI生成的),可以这样写:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('数据库名', '用户名', '密码', {
  host: 'localhost',
  dialect: 'postgres'
});
// 之后就可以用sequelize.query()了

内容的提问来源于stack exchange,提问作者Diego Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:32:48