日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

GolangのsqlxでIN句が使いたかったので調べたメモ

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したい - 日頃の行い

書いたコードはこんな感じです。
この辺のドキュメントを参考にしました。

Illustrated Guide to SQLX

gist.github.com

動いたっぽい。

感想

  • テーブルからIN句を使ってデータを取ってstructにbindできました。
  • IN句も使えそう。
  • sqlx.Inを使うと第二引数に与えたsliceの長さ分だけ ? を増やしたクエリを返してくれるみたいですね。
  • そのクエリを利用してSelectやらRebindやらすればいいみたいです。便利。

こちらもおすすめ

arata.hatenadiary.com