Comment puis-je voir le SQL généré par Sequelize.js?


98

Je veux voir les commandes SQL envoyées au serveur PostgreSQL car je dois vérifier si elles sont correctes. En particulier, je m'intéresse aux commandes de création de table.

Par exemple, ActiveRecord (Ruby) imprime ses instructions SQL sur la sortie standard. Est-ce possible avec Node.js / ActionHero.js et Sequelize.js?

Réponses:


154

Vous pouvez passer une option de journalisation lors de l'initialisation de sequelize, qui peut être une fonction ou une console.

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

Vous pouvez également transmettre une option de journalisation à .sync si vous souhaitez uniquement afficher les requêtes de création de table

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

Merci, c'est exactement ce que je veux. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- Qu'est-ce que ça veut dire?
ideaboxer

Cela signifie que vous devez passer une fonction au lieu de true.
Mick Hansen

5
Je n'ai jamais passé true.
ideaboxer

1
Je suis un peu en retard à la fête, mais je console.logtravaille de manière mystérieuse. Vous devriez pouvoir éviter le message du journal en utilisant { logging: (msg) => console.log(msg) }ou { logging: function(msg) { console.log(msg) } }. (non testé donc je pourrais me tromper totalement)
3ocène

1
Existe-t-il un moyen de voir la requête générée, mais la requête ne doit pas s'exécuter?
NIKHIL CM

37

Comme indiqué dans le journal Error: Please note that find* was refactored and uses only one options object from now on.. Pour la dernière version de sequelize (4) si vous voulez avoir le résultat pour une seule commande:

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


1
cela fonctionne également avec les requêtes natives:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
c'est la bonne réponse pour l'emplacement de logging: console.log, dans sequelize 4.
user627119

30

Si vous voulez regarder la suite pour une commande, vous pouvez l'écouter et attacher une fonction à l'impression du sql.

Regardez cet exemple:

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

38
Vous passez maintenant dans un enregistreur comme une option pour enregistrer une seule déclaration:User.find(1, { logging: console.log })
Stephen Watkins

4
Le mien dit juste en <functionName>.findOne(...).on is not a function utilisant sequelize 3.30.4
ginna

1
Il semble que certains des mixins d'association ne prennent pas en charge l'option de journalisation. Plus précisément, le get*sur la source d'une relation appartient à.
Tom

3

Vous pouvez également profiter de l'utilisation par Sequelize du module Debug, en paramétrant votre environnement, ainsi: DEBUG=sequelize:sql* avant de démarrer votre application.


1
cela devrait être une réponse! Merci pour le conseil!
confiq
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.