Bagaimana saya bisa melihat SQL yang dihasilkan oleh Sequelize.js?


98

Saya ingin melihat perintah SQL yang dikirim ke server PostgreSQL karena saya perlu memeriksa apakah sudah benar. Secara khusus, saya tertarik dengan perintah pembuatan tabel.

Misalnya, ActiveRecord (Ruby) mencetak pernyataan SQL-nya ke keluaran standar. Apakah ini mungkin dengan Node.js / ActionHero.js dan Sequelize.js juga?

Jawaban:


154

Anda bisa memberikan opsi logging saat menginisialisasi sequelize, yang bisa berupa function atau console.log

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

Anda juga dapat memberikan opsi logging ke .sync jika Anda hanya ingin melihat kueri pembuatan tabel

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

Terima kasih, inilah yang saya inginkan. DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log-- Apa artinya ini?
ideaboxer

Berarti Anda harus meneruskan fungsi, bukan true.
Mick Hansen

5
Saya tidak pernah lewat true.
ideaboxer

1
Saya agak terlambat ke pesta, tetapi console.logbekerja dengan cara yang misterius. Anda harus dapat menghindari pesan log menggunakan { logging: (msg) => console.log(msg) }atau { logging: function(msg) { console.log(msg) } }. (belum teruji jadi saya bisa salah total)
3ocene

1
Apakah ada cara agar saya dapat melihat kueri yang dihasilkan, tetapi kueri tersebut tidak boleh dijalankan?
NIKHIL CM

37

Seperti yang tertera di log Error: Please note that find* was refactored and uses only one options object from now on.. Untuk versi sequelize terbaru (4) jika Anda ingin mendapatkan hasil hanya untuk satu perintah:

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


1
ini juga berfungsi dengan kueri asli:query(statement, { replacements: { userId: userId, superiorPositions: [ 4, 5, 7 ], departments: [ departmentId ] }, logging: console.log });
Christian Noel

1
ini adalah jawaban yang benar untuk tempat logging: console.log harus ditempatkan, di sekuel 4.
user627119

30

Jika Anda ingin melihat sekuel untuk satu perintah, Anda dapat mendengarkannya dan melampirkan fungsi untuk mencetak sql.

Lihat contoh ini:

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

38
Sekarang Anda memasukkan logger sebagai opsi untuk mencatat satu pernyataan:User.find(1, { logging: console.log })
Stephen Watkins

4
<functionName>.findOne(...).on is not a function Milik saya hanya mengatakan Menggunakan sekuel 3.30.4
ginna

1
Tampaknya beberapa mixin asosiasi tidak mendukung opsi logging. Secara khusus, get*pada sumber hubungan milikTo.
Tom

2

Anda juga dapat memanfaatkan penggunaan modul Debug oleh Sequelize, dengan menyetel lingkungan Anda, sebagai berikut: DEBUG=sequelize:sql* sebelum memulai aplikasi Anda.


1
ini harus menjadi jawaban! Terima kasih atas tipnya!
confiq
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.