Como posso ver o SQL gerado pelo Sequelize.js?


98

Quero ver os comandos SQL enviados ao servidor PostgreSQL porque preciso verificar se estão corretos. Em particular, estou interessado nos comandos de criação de tabelas.

Por exemplo, ActiveRecord (Ruby) imprime suas instruções SQL na saída padrão. Isso também é possível com Node.js / ActionHero.js e Sequelize.js?

Respostas:


154

Você pode passar uma opção de registro ao inicializar o sequelize, que pode ser uma função ou console.log

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

Você também pode passar uma opção de registro para .sync se quiser apenas ver as consultas de criação de tabela

sequelize.sync({ logging: console.log })

Obrigado, é exatamente isso que eu quero. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- O que isto significa?
ideaboxer

Significa que você deve passar uma função em vez de true.
Mick Hansen

5
Eu nunca passei true.
ideaboxer

1
Estou um pouco atrasado para a festa, mas console.logfunciona de maneiras misteriosas. Você deve ser capaz de evitar a mensagem de log usando { logging: (msg) => console.log(msg) }ou { logging: function(msg) { console.log(msg) } }. (não testado, então eu posso estar totalmente errado)
3oceno

1
Existe alguma maneira de ver a consulta gerada, mas a consulta não deve ser executada?
NIKHIL CM de

37

Conforme indicado no log Error: Please note that find* was refactored and uses only one options object from now on.. Para a última versão sequelize (4), se você quiser ter o resultado para apenas um comando:

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


1
isso também funciona com consultas nativas:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
esta é a resposta correta para onde o registro: console.log deve ser colocado, na sequência 4.
user627119

30

Se você quiser ver a sequência de um comando, você pode ouvi-lo e anexar uma função para imprimir o sql.

Veja este exemplo:

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

38
Agora você passa um registrador como uma opção para registrar uma única declaração:User.find(1, { logging: console.log })
Stephen Watkins

4
O meu apenas diz <functionName>.findOne(...).on is not a function Using sequelize 3.30.4
ginna

1
Parece que alguns dos mixins de associação não suportam a opção de registro. Especificamente, o get*na origem de um relacionamento belongsTo.
Tom,

2

Você também pode tirar proveito do uso do módulo Debug pelo Sequelize, configurando seu ambiente, desta forma: DEBUG=sequelize:sql* antes de iniciar seu aplicativo.


1
esta deve ser uma resposta! Obrigado pela dica!
confiq
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.