Wie kann ich die von Sequelize.js generierte SQL sehen?


98

Ich möchte die SQL-Befehle sehen, die an den PostgreSQL-Server gesendet werden, da ich überprüfen muss, ob sie korrekt sind. Insbesondere interessieren mich die Befehle zum Erstellen von Tabellen.

Beispielsweise druckt ActiveRecord (Ruby) seine SQL-Anweisungen in die Standardausgabe. Ist dies auch mit Node.js / ActionHero.js und Sequelize.js möglich?

Antworten:


154

Sie können beim Initialisieren von sequelize eine Protokollierungsoption übergeben, die entweder eine Funktion oder console.log sein kann

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

Sie können auch eine Protokollierungsoption an .sync übergeben, wenn Sie nur die Tabellenerstellungsabfragen anzeigen möchten

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

Danke, genau das will ich. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- was bedeutet das?
Ideaboxer

Das heißt, Sie sollten eine Funktion anstelle von true übergeben.
Mick Hansen

5
Ich habe nie bestanden true.
Ideaboxer

1
Ich bin etwas spät zur Party, console.logarbeite aber auf mysteriöse Weise. Sie sollten in der Lage sein, die Protokollnachricht mit { logging: (msg) => console.log(msg) }oder zu vermeiden { logging: function(msg) { console.log(msg) } }. (ungetestet, so dass ich völlig falsch liegen könnte)
3ocene

1
Kann ich die generierte Abfrage auf irgendeine Weise sehen, aber die Abfrage sollte nicht ausgeführt werden?
NIKHIL CM

37

Wie im Protokoll angegeben Error: Please note that find* was refactored and uses only one options object from now on.. Für die neueste Folgeversion (4), wenn Sie das Ergebnis nur für einen Befehl haben möchten:

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


1
Dies funktioniert auch mit nativen Abfragen:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
Dies ist die richtige Antwort für die Protokollierung: console.log sollte in Folge 4 platziert werden.
user627119

30

Wenn Sie sich die Fortsetzung für einen Befehl ansehen möchten, können Sie sie anhören und dem SQL-Druck eine Funktion hinzufügen.

Schauen Sie sich dieses Beispiel an:

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

38
Sie übergeben jetzt einen Logger als Option, um eine einzelne Anweisung zu protokollieren:User.find(1, { logging: console.log })
Stephen Watkins

4
Meins sagt nur <functionName>.findOne(...).on is not a function mit Sequelize 3.30.4
Ginna

1
Es scheint, dass einige der Zuordnungsmixins die Protokollierungsoption nicht unterstützen. Insbesondere get*die Quelle einer Zugehörigkeit zur Beziehung.
Tom

1

Sie können auch die Verwendung des Debug-Moduls durch Sequelize nutzen, indem Sie Ihre Umgebung wie folgt einstellen: DEBUG=sequelize:sql* bevor Sie Ihre App starten.


Das sollte eine Antwort sein! Danke für den Tipp!
confiq vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.