¿Cómo puedo ver el SQL generado por Sequelize.js?


98

Quiero ver los comandos SQL que se envían al servidor PostgreSQL porque necesito verificar si son correctos. En particular, estoy interesado en los comandos de creación de tablas.

Por ejemplo, ActiveRecord (Ruby) imprime sus declaraciones SQL en una salida estándar. ¿Es esto posible con Node.js / ActionHero.js y Sequelize.js también?

Respuestas:


154

Puede pasar una opción de registro al inicializar sequelize, que puede ser una función o una consola.

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

También puede pasar una opción de registro a .sync si solo desea ver las consultas de creación de tablas

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

Gracias, esto es exactamente lo que quiero. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- ¿Qué significa esto?
ideaboxer

Significa que debes pasar una función en lugar de true.
Mick Hansen

5
Nunca jamás pasé true.
ideaboxer

1
Llego un poco tarde a la fiesta, pero console.logfunciona de forma misteriosa. Debería poder evitar el mensaje de registro utilizando { logging: (msg) => console.log(msg) }o { logging: function(msg) { console.log(msg) } }. (no probado, así que podría estar totalmente equivocado)
3ocene

1
¿Hay alguna forma de que pueda ver la consulta generada, pero la consulta no debería ejecutarse?
NIKHIL CM

37

Como se indica en el registro Error: Please note that find* was refactored and uses only one options object from now on.. Para la última versión de secuenciación (4) si desea obtener el resultado para un solo comando:

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


1
esto también funciona con consultas nativas:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
esta es la respuesta correcta para dónde se debe colocar logging: console.log, en sequelize 4.
user627119

30

Si desea ver la secuenciación de un comando, puede escucharlo y adjuntar una función a la impresión del archivo sql.

Mira este ejemplo:

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

38
Ahora pasa un registrador como una opción para registrar una sola declaración:User.find(1, { logging: console.log })
Stephen Watkins

4
El mío solo dice <functionName>.findOne(...).on is not a function Usar sequelize 3.30.4
ginna

1
Parece que algunos de los mixins de asociación no admiten la opción de registro. Específicamente, get*en el origen de una relación pertenece a.
Tom

2

También puede aprovechar el uso que hace Sequelize del módulo Debug, configurando su entorno, así: DEBUG=sequelize:sql* antes de iniciar su aplicación.


1
¡esto debería ser una respuesta! ¡Gracias por el consejo!
confiq
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.