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

Sequelize.Model.create返回成功但数据库无新增行问题排查

问题:Sequelize create返回实例但数据库无数据

环境

  • Postgres
  • Sequelize
  • Node.js

问题现象

调用Model.create函数后返回包含dataValues的Session实例,但数据库中未新增对应数据;执行Session.findOne查询userId对应的记录返回null。已尝试重启服务器、数据库,重新执行迁移操作。

相关代码

async function createSession({ userId, accessToken, refreshToken, expiresAt }) {
    const session = await Session.create({
        userId,
        accessToken,
        refreshToken,
        expiresAt,
    });
    console.log(session);
    const checkSession = await Session.findOne({ where: { userId } });
    console.log(checkSession);
    return session;
}

控制台输出

Session {
  dataValues: {
    id: 'b8e6c3eb-0251-43d2-89a8-40f032d9549b',
    userId: 1,
    accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzkxNTY1MTksInVzZXJJZCI6MSwicm9sZUlkIjoxMSwiaWF0IjoxNzM5MTU0NzE5fQ.eqDxNSJ6rthoAFOBndfoK2DIfgM-8UfXvXHa2G1sGDE',
    refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDE3NDY3MTksInVzZXJJZCI6MSwiaWF0IjoxNzM5MTU0NzE5fQ.8m_dQ10f3H4guCIAsWaiGfBcVuS8ecAInX4xhG9WS_o',
    expiresAt: 2025-02-10T03:01:59.457Z
  },
  _previousDataValues: {
    userId: 1,
    accessToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzkxNTY1MTksInVzZXJJZCI6MSwicm9sZUlkIjoxMSwiaWF0IjoxNzM5MTU0NzE5fQ.eqDxNSJ6rthoAFOBndfoK2DIfgM-8UfXvXHa2G1sGDE',
    refreshToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDE3NDY3MTksInVzZXJJZCI6MSwiaWF0IjoxNzM5MTU0NzE5fQ.8m_dQ10f3H4guCIAsWaiGfBcVuS8ecAInX4xhG9WS_o',
    expiresAt: 2025-02-10T03:01:59.457Z,
    id: 'b8e6c3eb-0251-43d2-89a8-40f032d9549b'
  },
  uniqno: 1,
  _changed: Set(0) {},
  _options: {
    isNewRecord: true,
    _schema: null,
    _schemaDelimiter: '',
    attributes: undefined,
    include: undefined,
    raw: undefined,
    silent: undefined
  },
  isNewRecord: false
}

null

排查与解决思路

  1. 检查事务状态:如果代码被外层事务包裹但未执行commit(),create操作仅在事务内生效,不会持久化到数据库。确认是否存在未提交的事务逻辑。
  2. 核对模型与表结构:
    • 确认Session模型的字段类型、约束(如allowNull、主键设置)与Postgres表完全匹配,比如id是否配置为UUID自动生成、expiresAt是否为时间类型。
    • 检查模型是否关闭了timestamps但表中存在createdAt/updatedAt必填字段,导致插入失败。
  3. 查看实际执行的SQL:在Sequelize初始化时开启logging: console.log,打印出create对应的SQL语句,直接在Postgres客户端执行该语句,排查是否有语法错误或约束冲突。
  4. 验证字段规则:检查模型中是否有自定义验证器,是否存在字段不符合allowNull、长度限制等规则的情况,Sequelize可能静默处理错误但不插入数据。
  5. 确认数据库连接:检查Sequelize配置的数据库实例、名称、账号是否正确,避免连接到错误的数据库导致数据未写入目标库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:48:16