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{})
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)
詳細については、 [Generic Interface](generic_interface. html) を参照してください。
サポートされていないデータベース いくつかのデータベースは mysql
または postgres
と互換性があります。 もし互換性があれば、それらのデータベース固有の文法を使用することができます。
それ以外の場合、 ドライバーを作ることをお勧めします。プルリクエストを歓迎しています!