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

