Go PostgresSQL

Golang GORMを使ったインサートIDの取得

2017年6月19日

Golang GORM インサートID取得

Golangを使って、登録したIDの取得するのを度々忘れるので、メモとして残します。

GORMってなに

GORMとは、Golangで利用するORMのライブラリになります。

ORM以外にも、DBのマイグレーション管理などもできます。

ORMやマイグレーションて何?って思った方もいると思いますので簡単に説明します。

ORマッパー

ORMはO/Rマッパーの略で、OはオブジェクトでRはリレーションになります。

オブジェクト指向言語間のデータのやりとりを行うことです。

DBマイグレーション

データベースの処理を管理することを指します。

テーブルの作成やテーブルの変更などをプログラムで管理します。

昔のGooseとか結構使い勝手が良かったのですが、今はどれが良いか正直好みによります。

実装

最初使い方が分からずにいろいろ失敗はしたのですが、下記が成功例になります。

簡単なインサート処理を行なって、登録したデータのPrimary Keyを取得する処理です。

import (
 "github.com/jinzhu/gorm"
 _ "github.com/jinzhu/gorm/dialects/postgres"
 "log" 
) 

type Hoge struct {
 HogeID int `gorm:"primary_key"` 
} 

func main() {
 db, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmode=disable password=mypassword")
 var hoge Hoge 
 db.Create(&hoge)
 log.Println(hoge)
 defer db.Close() 
}

12行目のgorm.OpenでPostgreSQLのコネクタを作成し、14行目のdb.Createでデータを作っています。

インサートの中身は、7行目にある構造体HogeでHogeIDというプライマリーキーになります。

&hogeにインサートしたIDが入る仕組みになっています。

注意点

構造体のタグの記述方法に失敗していた。

最初は、この書き方で取れると思っていた。

HogeID int `gorm:column:"hoge_id"`

これでは取得する事が出来ませんでした。

次に書いたのがこれです。

HogeID int `gorm:"AUTO_INCREMENT"`

結局、どれも取れませんでした。

1番目の構造体が取得できなかった原因は、タグ・アノテーションの書き方が間違っていたからかもしれません(2021-07-11 追記)。

正しい書き方は、下記になります。

HogeID int `gorm:"column:hoge_id"

まとめ

GolangのGORMを使ってインサートしたIDを取得できます。

primary_keyにするとうまく取得できるので、取得できない場合は構造体を確認してみてください。

パラメータ
Golang Ginを使ったパラメータの取得
今回はGinのパラメータを取得方法について書いていきます。 取得するパラメータの種類として、パスの中にあるIDやクエリーストリング、フォームのパラメータについてここでは解説しています。 パスにあるパラメータの取得 URIの中で指定したIDな ...

続きを見る

-Go, PostgresSQL
-, ,