Golangでバッチを最近書いてるんですが、
sqlxを使っていて、
IN句のprepared statmentどうやって使うんだろうと思ったので調べたときのメモです。
準備
とても適当なテーブルを用意します。
idとnameをカラムにもつhogeというテーブルです。
3件適当なデータを突っ込んでおきます。
((none))> use test; Database changed (test)> create table hoge (id int auto_increment, name varchar(255), primary key (id)); Query OK, 0 rows affected (0.03 sec) (test)> insert into hoge (name) values ("hoge"); Query OK, 1 row affected (0.01 sec) (test)> insert into hoge (name) values ("fuga"); Query OK, 1 row affected (0.00 sec) (test)> insert into hoge (name) values ("piyo"); Query OK, 1 row affected (0.00 sec) (test)> select * from hoge; +----+------+ | id | name | +----+------+ | 1 | hoge | | 2 | fuga | | 3 | piyo | +----+------+ 3 rows in set (0.00 sec)
書いたコード
idが2, 3のレコードを取ってきてstructにbindさせています。
structにbindさせるやつはこのへんで試したりしました。
golangでSQLを投げて返ってきた結果をstructにbindしたい - 日頃の行い
書いたコードはこんな感じです。
この辺のドキュメントを参考にしました。
動いたっぽい。
感想
- テーブルからIN句を使ってデータを取ってstructにbindできました。
- IN句も使えそう。
- sqlx.Inを使うと第二引数に与えたsliceの長さ分だけ
?
を増やしたクエリを返してくれるみたいですね。 - そのクエリを利用してSelectやらRebindやらすればいいみたいです。便利。
こちらもおすすめ