Come posso vedere l'SQL generato da Sequelize.js?


98

Voglio vedere i comandi SQL inviati al server PostgreSQL perché ho bisogno di controllare se sono corretti. In particolare, mi interessano i comandi per la creazione di tabelle.

Ad esempio, ActiveRecord (Ruby) stampa le sue istruzioni SQL sull'output standard. È possibile anche con Node.js / ActionHero.js e Sequelize.js?

Risposte:


154

È possibile passare un'opzione di registrazione durante l'inizializzazione di sequelize, che può essere una funzione o console.log

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

Puoi anche passare un'opzione di registrazione a .sync se desideri solo visualizzare le query di creazione della tabella

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

Grazie, è esattamente quello che voglio. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- Cosa significa questo?
ideaboxer

Significa che dovresti passare una funzione invece di true.
Mick Hansen

5
Non sono mai passato true.
ideaboxer

1
Sono un po 'in ritardo alla festa, ma console.logfunziona in modi misteriosi. Dovresti essere in grado di evitare il messaggio di log utilizzando { logging: (msg) => console.log(msg) }o { logging: function(msg) { console.log(msg) } }. (non testato quindi potrei sbagliarmi completamente)
3ocene

1
C'è un modo per vedere la query generata, ma la query non dovrebbe essere eseguita?
NIKHIL CM

37

Come indicato nel registro Error: Please note that find* was refactored and uses only one options object from now on. . Per l'ultima versione sequelize (4) se vuoi avere il risultato per un solo comando:

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


1
funziona anche con query native:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
questa è la risposta corretta per dove deve essere posizionato il logging: console.log, nella sequenza 4.
user627119

30

Se vuoi guardare il sequelize per un comando puoi ascoltarlo e allegare una funzione alla stampa il sql.

Guarda questo esempio:

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

38
Ora si passa in un logger come opzione per registrare una singola istruzione:User.find(1, { logging: console.log })
Stephen Watkins,

4
Il mio dice solo <functionName>.findOne(...).on is not a function Using sequelize 3.30.4
ginna

1
Sembra che alcuni dei mixin di associazione non supportino l'opzione di registrazione. In particolare, l' get*origine di una relazione appartieneTo.
Tom il

2

Puoi anche sfruttare l'utilizzo da parte di Sequelize del modulo Debug, impostando il tuo ambiente, quindi: DEBUG=sequelize:sql* prima di avviare la tua app.


1
questa dovrebbe essere una risposta! Grazie per il consiglio!
confiq
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.