驱动程序和方言

要连接到数据库,您需要一个 database/sql 驱动程序和一个与 Bun 捆绑在一起的相应 SQL 方言。

PostgreSQL

有关使用 Bun 与 PostgreSQL 的信息,请参阅 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 supports `ON CONFLICT DO UPDATE` (PostgreSQL, SQLite)
}

if db.HasFeature(feature.InsertOnDuplicateKey) {
    // DBMS supports `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")
}