SQLx (Rust) の query(), query_as(), query!, query_as! の違い

みるみ

Rust の SQLx でクエリしたいとき、パッと見の選択肢がいくつもあってどれを使うべきかの判断がとても難しい。実際に書いてある程度慣れてきても何度もわからなくなったりするので、このメモはそのまま需要があるかもと思った。とりあえず未加工で公開してみます。

事前情報として読んでおくべきページは、

です。あと例によって examples もいっぱいあります。

  • query_with, query_as_with シリーズは使いづらいのでまず検討候補から外してよさそう
  • ほとんど query()query! でいける
    • query() は commit 系、query! は select 系という使い分け
    • commit して返り値を受けたいときは query! を使うとよい(examples にもある)
    • 込み入った型の定義や select 系クエリ後そのままその型の実装を使いたいようなシーンでは独自型を定義できている分 query_as! を使うとちょうどハマる
    • query_as() は唯一わかりやすい使い道が思いついてない…
  • マクロじゃない 2 つはいわゆる普通な感じ
    • 変数のバインドは 1 つずつ書く必要がある(行数が増える)
    • query_as() は返り値の型を指定できる
      • query() でも map を使ったコントロールは可能だが少し読みづらくなる(主観)
  • マクロの 2 つはコンパイル時チェックがある
    • これがオフラインモードの話(別にオフラインモードじゃなくてもいいけど)
    • そのうちの 2 つの違いは明確に型を指定するか匿名型かのみと思う
みるみ
みるみ

ブロガー、ソフトウェアエンジニア。

暗号資産業界で働いています。

この記事へのコメント
コメントはまだひとつもありません :)

新しいコメントを書く

  • 必須項目はコメント本文のみですが、お名前はぜひご記入いただけると嬉しいです。
    ※メールアドレスを書いた場合も公開されることはないのでご安心ください。
  • 特定のコメントに返信したい場合は各コメントにある「返信する」ボタンからどうぞ。
  • コメントはこちらで承認の作業を行うまでは表示されません。ご了承ください メールX からお願いします。