原文:Bun: Drivers and dialects (uptrace.dev)
版本:v1.1.17
要连接一个数据库,需要 database/sql 驱动和 Bun 提供的相应的 SQL 方言。
PostgreSQL
查看 PostgreSQL 部分了解关于使用 Bun 操作 PostgreSQL 的内容。
MySQL
Bun 使用 MySQL 驱动 和 mysqldialect 支持 MySQL 5+ 和 MariaDB :
import (
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/mysqldialect"
_ "github.com/go-sql-driver/mysql"
)
sqldb, err := sql.Open("mysql", "root:pass@/test")
if err != nil {
panic(err)
}
db := bun.NewDB(sqldb, mysqldialect.New())
MSSQL
Bun 从 v1.1.x 开始支持 SQL Server v2019.CU4 连接 SQL Server 服务器,使用 go-mssqldb 驱动 和 mssqldialect :
import (
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/mssqldialect"
_ "github.com/denisenkom/go-mssqldb"
)
sqldb, err := sql.Open("sqlserver", "sqlserver://sa:passWORD1@localhost:1433?database=test")
if err != nil {
panic(err)
}
db := bun.NewDB(sqldb, mssqldialect.New())
SQLite
要连接一个 SQLite 数据库,使用 sqliteshim 驱动,它会根据平台自动导入 modernc.org/sqlite 或 mattn/go-sqlite3 。
import (
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/sqlitedialect"
"github.com/uptrace/bun/driver/sqliteshim"
)
sqldb, err := sql.Open(sqliteshim.ShimName, "file::memory:?cache=shared")
if err != nil {
panic(err)
}
db := bun.NewDB(sqldb, sqlitedialect.New())
如果在使用一个内存数据库,那么需要将 *sql.DB 配置为不关闭的活动连接。否则数据库会在连接关闭后被删除。
sqldb.SetMaxIdleConns(1000)
sqldb.SetConnMaxLifetime(0)
编写 DMBS 上的特定代码
Bun 自带 feature 包,可以用来发现 使用的 DBMS 支持的特性:
import "github.com/uptrace/bun/dialect/feature"
if db.HasFeature(feature.InsertOnConflict) {
// DBMS 支持 `ON CONFLICT DO UPDATE` (PostgreSQL, SQLite)
}
if db.HasFeature(feature.InsertOnDuplicateKey) {
// DBMS 支持 `ON DUPLICATE KEY UPDATE` (MySQL, MariaDB)
}
也可以直接确认数据的方言名称:
import "github.com/uptrace/bun/dialect"
switch db.Dialect().Name() {
case dialect.SQLite:
case dialect.PG:
case dialect.MySQL:
case dialect.MSSQL:
default:
panic("not reached")
}