GORMは公式にMySQL、PostgreSQL、SQLite、SQL Server をサポートしています
MySQL import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) func main () { dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) }
注 time.Time
を正しく処理するには、パラメータとして parseTime
を含める必要があります。 (その他のパラメータ ) UTF-8 エンコーディングを完全にサポートするには、 charset=utf8
を charset=utf8mb4
に変更する必要があります。 詳細な説明は この記事 を参照してください。
MySQLドライバは、 初期化時に指定できる詳細な設定 を提供しています。
db, err := gorm.Open(mysql.New(mysql.Config{ DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local" , DefaultStringSize: 256 , DisableDatetimePrecision: true , DontSupportRenameIndex: true , DontSupportRenameColumn: true , SkipInitializeWithVersion: false , }), &gorm.Config{})
ドライバをカスタマイズする GORMでは、 DriverName
オプションを使用してMySQLドライバをカスタマイズできます。
import ( _ "example.com/my_mysql_driver" "gorm.io/driver/mysql" "gorm.io/gorm" ) db, err := gorm.Open(mysql.New(mysql.Config{ DriverName: "my_mysql_driver" , DSN: "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local" , }), &gorm.Config{})
既存のデータベース接続 GORMでは、すでに確立されているデータベース接続を使って *gorm.DB
を初期化することができます。
import ( "database/sql" "gorm.io/driver/mysql" "gorm.io/gorm" ) sqlDB, err := sql.Open("mysql" , "mydb_dsn" ) gormDB, err := gorm.Open(mysql.New(mysql.Config{ Conn: sqlDB, }), &gorm.Config{})
PostgreSQL import ( "gorm.io/driver/postgres" "gorm.io/gorm" ) dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
Postgresのdatabase/sqlドライバとして pgx を使用しています。これはデフォルトでprepared statement cacheを有効にしています。無効にするには:
db, err := gorm.Open(postgres.New(postgres.Config{ DSN: "user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai" , PreferSimpleProtocol: true , }), &gorm.Config{})
ドライバーのカスタマイズ GORMでは、 DriverName
オプションを使用してPostgreSQLドライバをカスタマイズできます。例:
import ( _ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres" "gorm.io/gorm" ) db, err := gorm.Open(postgres.New(postgres.Config{ DriverName: "cloudsqlpostgres" , DSN: "host=project:region:instance user=postgres dbname=postgres password=password sslmode=disable" , })
既存のデータベース接続 GORMでは、すでに確立されているデータベース接続を使って *gorm.DB
を初期化することができます。
import ( "database/sql" "gorm.io/driver/postgres" "gorm.io/gorm" ) sqlDB, err := sql.Open("pgx" , "mydb_dsn" ) gormDB, err := gorm.Open(postgres.New(postgres.Config{ Conn: sqlDB, }), &gorm.Config{})
SQLite import ( "gorm.io/driver/sqlite" "gorm.io/gorm" ) db, err := gorm.Open(sqlite.Open("gorm.db" ), &gorm.Config{})
注意: ファイルへのパスを指定する代わりに、 file::memory:?cache=shared
を使用することもできます。 これを指定することで、システムメモリで一時的なデータベースを使用するようSQLiteに指示します。 (詳細については SQLite docs を参照してください。)
SQL Server import ( "gorm.io/driver/sqlserver" "gorm.io/gorm" ) dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm" db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
TiDB TiDBはMySQLプロトコルと互換性があります。 MySQL の部分に従って、TiDB への接続を作成できます。
TiDBには注目すべきポイントがいくつかあります:
gorm:"primaryKey;default:auto_random()"
タグを使用して、TiDB の AUTO_RANDOM
機能を使用できます。
TiDBはv6.2.0
から SAVEPOINT
をサポートしています, この機能を使用する場合は、TiDBのバージョンに注意してください。
TiDBはv6.6.0
から SAVEPOINT
をサポートしています, この機能を使用する場合は、TiDBのバージョンに注意してください。
import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" ) type Product struct { ID uint `gorm:"primaryKey;default:auto_random()"` Code string Price uint } func main () { db, err := gorm.Open(mysql.Open("root:@tcp(127.0.0.1:4000)/test" ), &gorm.Config{}) if err != nil { panic ("failed to connect database" ) } db.AutoMigrate(&Product{}) insertProduct := &Product{Code: "D42" , Price: 100 } db.Create(insertProduct) fmt.Printf("insert ID: %d, Code: %s, Price: %d\n" , insertProduct.ID, insertProduct.Code, insertProduct.Price) readProduct := &Product{} db.First(&readProduct, "code = ?" , "D42" ) fmt.Printf("read ID: %d, Code: %s, Price: %d\n" , readProduct.ID, readProduct.Code, readProduct.Price) }
Clickhouse https://github.com/go-gorm/clickhouse
import ( "gorm.io/driver/clickhouse" "gorm.io/gorm" ) func main () { dsn := "tcp://localhost:9000?database=gorm&username=gorm&password=gorm&read_timeout=10&write_timeout=20" db, err := gorm.Open(clickhouse.Open(dsn), &gorm.Config{}) db.AutoMigrate(&User{}) db.Set("gorm:table_options" , "ENGINE=Distributed(cluster, default, hits)" ).AutoMigrate(&User{}) db.Create(&user) db.Find(&user, "id = ?" , 10 ) var users = []User{user1, user2, user3} db.Create(&users) }
コネクションプール GORMは database/sql を使用してコネクションプールを維持しています。
sqlDB, err := db.DB() sqlDB.SetMaxIdleConns(10 ) sqlDB.SetMaxOpenConns(100 ) sqlDB.SetConnMaxLifetime(time.Hour)
Refer Generic Interface for details
サポートされていないデータベース Some databases may be compatible with the mysql
or postgres
dialect, in which case you could just use the dialect for those databases.
それ以外の場合、 ドライバーを作ることをお勧めします。プルリクエストを歓迎しています!