[官文译]Go轻量级ORM Bun - 驱动和方言

161 阅读1分钟

原文: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")
}