如何查看Sequelize.js生成的SQL?

ide*_*xer 85 node.js sequelize.js

我想看看发送到PostgreSQL服务器的SQL命令,因为我需要检查它们是否正确.特别是,我对表创建命令感兴趣.

例如,ActiveRecord(Ruby)将其SQL语句打印到标准输出.这可能与Node.js/ActionHero.js和Sequelize.js一样吗?

Jan*_*ier 130

初始化sequelize时可以传递日志记录选项,可以是函数或console.log

var sequelize = new Sequelize('database', 'username', 'password', {
    logging: console.log
    logging: function (str) {
        // do your own logging
    }
});
Run Code Online (Sandbox Code Playgroud)

如果只想查看表创建查询,还可以将日志记录选项传递给.sync

sequelize.sync({ logging: console.log })
Run Code Online (Sandbox Code Playgroud)

  • 我从来没有通过`true`. (5认同)
  • 我来晚了一点,但“console.log”以神秘的方式工作。您应该能够使用 `{logging: (msg) => console.log(msg) }` 或 `{logging: function(msg) { console.log(msg) } }` 来避免日志消息。(未经测试,所以我可能完全错了) (3认同)
  • 有什么办法可以查看生成的查询,但查询不应该执行吗? (2认同)

vpo*_*tis 30

如果你想查看一个命令的sequelize,你可以听它并附加一个函数来打印sql.

看看这个例子:

User.find(1).on('sql', console.log).then(function(user) {
  // do whatever you want with the user here
Run Code Online (Sandbox Code Playgroud)

  • 您现在传入一个记录器作为记录单个语句的选项:`User.find(1,{logging:console.log})` (29认同)
  • 我只是说`<functionName> .findOne(...).on不是函数`使用sequelize 3.30.4 (4认同)

Adl*_*ane 25

如日志中所述Error: Please note that find* was refactored and uses only one options object from now on..对于最新的sequelize版本(4),如果您只想获得一个命令的结果:

User.findAll({where: {...}, logging: console.log})

  • 这也适用于本机查询:`query(statement, { replacements: { userId: userId,superiorPositions: [ 4, 5, 7 ],parts: [departmentId ] },logging: console.log });` (2认同)

ste*_*eev 16

您还可以通过设置环境来利用 Sequelize 对 Debug 模块的使用,因此: DEBUG=sequelize:sql* 在启动应用程序之前。

  • 这应该是一个答案!谢谢你的提示! (2认同)