gin - 连接数据库 MySQL postgres
https://gorm.io/docs/connecting_to_the_database.html
1.MySQL:
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> <span class="string">"gorm.io/driver/mysql"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> {</span>
<span class="line"> <span class="comment">// refer https://github.com/go-sql-driver/mysql#dsn-data-source-name for details</span></span>
<span class="line"> dsn := <span class="string">"user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"</span></span>
<span class="line"> db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})</span>
<span class="line">}</span>MySQL Driver 提供了一些可在初始化期间使用的高级配置,例如:
MySQL Driver provides a few advanced configurations which can be used during initialization, for example:
<span class="line">db, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line"> DSN: <span class="string">"gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local"</span>, <span class="comment">// data source name</span></span>
<span class="line"> DefaultStringSize: <span class="number">256</span>, <span class="comment">// default size for string fields</span></span>
<span class="line"> DisableDatetimePrecision: <span class="literal">true</span>, <span class="comment">// disable datetime precision, which not supported before MySQL 5.6</span></span>
<span class="line"> DontSupportRenameIndex: <span class="literal">true</span>, <span class="comment">// drop & create when rename index, rename index not supported before MySQL 5.7, MariaDB</span></span>
<span class="line"> DontSupportRenameColumn: <span class="literal">true</span>, <span class="comment">// `change` when rename column, rename column not supported before MySQL 8, MariaDB</span></span>
<span class="line"> SkipInitializeWithVersion: <span class="literal">false</span>, <span class="comment">// auto configure based on currently MySQL version</span></span>
<span class="line">}), &gorm.Config{})</span>NOTE:
To handle
time.TimeparseTime
To fully support UTF-8 encoding, you need to change
charset=utf8charset=utf8mb4
GORM 允许使用 DriverName 选项自定义 MySQL 驱动程序,例如:
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> _ <span class="string">"example.com/my_mysql_driver"</span></span>
<span class="line"> <span class="string">"gorm.io/driver/mysql"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line">db, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line"> DriverName: <span class="string">"my_mysql_driver"</span>,</span>
<span class="line"> DSN: <span class="string">"gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local"</span>, <span class="comment">// data source name, refer https://github.com/go-sql-driver/mysql#dsn-data-source-name</span></span>
<span class="line">}), &gorm.Config{})</span>对于已经存在的数据库的连接:
GORM allows to initialize *gorm.DB with an existing database connection
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> <span class="string">"database/sql"</span></span>
<span class="line"> <span class="string">"gorm.io/driver/mysql"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line">sqlDB, err := sql.Open(<span class="string">"mysql"</span>, <span class="string">"mydb_dsn"</span>)</span>
<span class="line">gormDB, err := gorm.Open(mysql.New(mysql.Config{</span>
<span class="line"> Conn: sqlDB,</span>
<span class="line">}), &gorm.Config{})</span>2.postgres连接:
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> <span class="string">"gorm.io/driver/postgres"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line">dsn := <span class="string">"host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"</span></span>
<span class="line">db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})</span>我们使用 pgx 作为 postgres 的数据库/sql 驱动程序,它默认启用准备好的语句缓存,禁用它:
We are using pgx as postgres’s database/sql driver, it enables prepared statement cache by default, to disable it:
<span class="line"><span class="comment">// https://github.com/go-gorm/postgres</span></span>
<span class="line">db, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line"> DSN: <span class="string">"user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"</span>,</span>
<span class="line"> PreferSimpleProtocol: <span class="literal">true</span>, <span class="comment">// disables implicit prepared statement usage</span></span>
<span class="line">}), &gorm.Config{})</span>
GORM 允许使用 DriverName 选项自定义 PostgreSQL 驱动程序,例如:
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> _ <span class="string">"github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line">db, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line"> DriverName: <span class="string">"cloudsqlpostgres"</span>,</span>
<span class="line"> DSN: <span class="string">"host=project:region:instance user=postgres dbname=postgres password=password sslmode=disable"</span>,</span>
<span class="line">})</span>对于已经存在的数据库的连接:
GORM allows to initialize *gorm.DB with an existing database connection
<span class="line"><span class="keyword">import</span> (</span>
<span class="line"> <span class="string">"database/sql"</span></span>
<span class="line"> <span class="string">"gorm.io/driver/postgres"</span></span>
<span class="line"> <span class="string">"gorm.io/gorm"</span></span>
<span class="line">)</span>
<span class="line">sqlDB, err := sql.Open(<span class="string">"pgx"</span>, <span class="string">"mydb_dsn"</span>)</span>
<span class="line">gormDB, err := gorm.Open(postgres.New(postgres.Config{</span>
<span class="line"> Conn: sqlDB,</span>
<span class="line">}), &gorm.Config{})</span>