以前の投稿で、knex.jsのtipsをいくつか書いたり(Node.jsでknex.jsを使ったSQL書き方Tips)、弊社技術部のmmm(むー)が書いたりしていますが(knex.jsでfromに2つ以上のサブクエリを書く方法)、今回はもう1つ「実行したSQL文を確認する」やり方を書きたいと思います。
これ意外とよく使うのに、やり方がぱっとわからなくて、社内でもどうやるのか質問があったりしたので新たにtipsとして追加したいと思います。
もちろん公式サイトにも載ってはいるのですが、日本語対応されていないのでちょっとわかりずらいんですよね。
で、やり方は単純で、SQL実行文に.toSQL()という記述を追加することで確認可能です。
具体的には
■記述例1
knex .select('*').from('users') .where('id = ?', [1])) .toSQL()
上記の結果を出力すると、
bindings: [1],
method: 'select',
sql: 'select * from "users" where id = ?',
options: undefined,
のように出力されて、バインド値と実際のSQL文を確認することができます。method: 'select',
sql: 'select * from "users" where id = ?',
options: undefined,
ちなみにpostgresqlはSQL実行文に.toSQL().toNative()と記述することで同様の結果が得られるようです。
■記述例2
knex .select('*').from('users') .where(knex.raw('id = ?', [1])) .toSQL().toNative()
出力結果
bindings: [1],
sql: 'select * from "users" where id = $1',
sql: 'select * from "users" where id = $1',
自分も最初はこのやり方を知らずに、デバッグでステップ実行してどこでSQL作っているのかずーっと奥の方まで追って行って、確認するのに結構苦労してました(苦笑)
以上のように知ってしまえば簡単なんですが、知らないとかなりやりずらいので、ご参考にしてみてください。
knex.js , Node.js
0 件のコメント:
コメントを投稿