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

Sequelize查询PostgreSQL报错:column 'createdAt' does not exist

解决Sequelize查询PostgreSQL时"column 'createdAt' does not exist"错误

问题核心

数据库表中时间字段为全小写的createdat和updatedat,但Sequelize模型里使用驼峰命名的createdAt、updatedAt,导致生成的SQL语句引用了不存在的驼峰字段,触发字段匹配错误。

解决方法

方法1:给模型字段指定field属性映射数据库列

修改Gig模型,为createdAt和updatedAt添加field选项,明确对应数据库的小写列名:

import Sequelize from "sequelize";
import db from "../config/database.js";

const Gig = db.define("gig", {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
  },
  title: {
    type: Sequelize.STRING,
  },
  technologies: {
    type: Sequelize.STRING,
  },
  budget: {
    type: Sequelize.STRING,
  },
  description: {
    type: Sequelize.STRING,
  },
  contact_email: {
    type: Sequelize.STRING,
  },
  createdAt: {
    type: Sequelize.DATEONLY,
    field: 'createdat' // 映射数据库的createdat列
  },
  updatedAt: {
    type: Sequelize.DATEONLY,
    field: 'updatedat' // 映射数据库的updatedat列
  },
});

export default Gig;

方法2:全局配置Sequelize命名规则(适用于多模型场景)

如果数据库所有表的时间字段都是无下划线的全小写格式,可在Sequelize初始化时开启underscored: true,让框架自动转换命名规则:

// config/database.js 初始化示例
import Sequelize from "sequelize";

const db = new Sequelize('你的数据库名', '用户名', '密码', {
  host: 'localhost',
  dialect: 'postgres',
  underscored: true // 驼峰字段自动映射为下划线小写列名
});

export default db;

注:该配置默认会将createdAt映射为created_at,如果你的数据库是无下划线的createdat,方法1的精准映射更适配。

方法3:修改数据库字段名(非必要不推荐)

若允许调整数据库结构,可将createdat、updatedat改为created_at、updated_at——这是Sequelize默认的下划线命名格式,无需额外配置即可匹配模型的驼峰字段。

验证效果

修改完成后重新运行查询,Sequelize生成的SQL会正确引用createdat和updatedat列,错误即可消除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:05:21