一架梯子,一头程序猿,仰望星空!
Go Ent ORM框架教程 > 内容正文

数据库连接


1. 连接SQLite数据库

SQLite 是一个轻量级的数据库,它的数据库就是一个文件,因此非常适合用于小型项目或者是测试环境。

以下是连接到 SQLite 并运行自动迁移工具的步骤:

首先,确保你已经安装了 SQLite 的 Go 语言驱动。可以通过以下命令来安装:

go get github.com/mattn/go-sqlite3

然后,在你的 Go 程序中,使用以下代码来连接数据库并创建 schema:

package main

import (
    "context"
    "log"
    "entdemo/ent"
    _ "github.com/mattn/go-sqlite3"
)

func main() {
    // 使用文件模式打开或创建 SQLite 数据库。
    client, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
    if err != nil {
        log.Fatalf("失败连接到 sqlite: %v", err)
    }
    defer client.Close()

    // 运行自动迁移工具以创建或更新数据库 schema。
    if err = client.Schema.Create(context.Background()); err != nil {
        log.Fatalf("创建 schema 资源失败: %v", err)
    }
    
    // 从此处开始使用 client 进行数据库操作。
}

上述代码首先引入了必要的包,并建立了一个 SQLite 的内存数据库连接对象 client。接着执行 client.Schema.Create 迁移 SQLite 数据库。这一步会根据你定义的 schema,自动创建或更新数据库中的表。

2. 连接PostgreSQL数据库

PostgreSQL 是一个功能强大的开源对象-关系型数据库系统。它广泛用于复杂的项目并且支持多种高级功能。为了在 Go 语言中使用 PostgreSQL,你需要使用其对应的驱动程序 github.com/lib/pq

安装 PostgreSQL 驱动:

go get github.com/lib/pq

连接到 PostgreSQL 数据库并执行迁移的步骤如下:

package main

import (
    "context"
    "log"
    "entdemo/ent"
    _ "github.com/lib/pq"
)

func main() {
    // 运用你的 PostgreSQL 数据库连接信息初始化client。
    client, err := ent.Open("postgres", "host=localhost port=5432 user=myuser dbname=mydb password=mypassword")
    if err != nil {
        log.Fatalf("失败连接到 postgres: %v", err)
    }
    defer client.Close()

    // 自动运行迁移工具。
    if err = client.Schema.Create(context.Background()); err != nil {
        log.Fatalf("创建 schema 资源失败: %v", err)
    }
    
    // 使用客户端进行其他数据库操作。
}

在这段代码中,需要替换 host, port, user, dbname 以及 password 为实际环境中正确的 PostgreSQL 连接信息。

3. 连接MySQL/MariaDB数据库

MySQL 是一个广泛使用的关系数据库管理系统,而 MariaDB 是它的一个分支。连接 MySQL/MariaDB 通常需要设置字符集(例如 utf8mb4)和时区(例如 UTC)。

首先,安装 MySQL 的 Go 语言驱动:

go get github.com/go-sql-driver/mysql

连接并配置 MySQL 数据库:

package main

import (
    "context"
    "log"
    "entdemo/ent"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 初始化 MySQL 客户端,设置字符集和时区。
    client, err := ent.Open("mysql", "username:password@tcp(localhost:3306)/dbname?parseTime=True&loc=Local&charset=utf8mb4,utf8")
    if err != nil {
        log.Fatalf("失败连接到 mysql: %v", err)
    }
    defer client.Close()

    // 执行数据迁移。
    if err = client.Schema.Create(context.Background()); err != nil {
        log.Fatalf("创建 schema 资源失败: %v", err)
    }
    
    // 数据库操作从这里开始。
}

确保将连接字符串中的 username, password, localhost, 3306, dbname 替换成适当的值。

4. 连接Gremlin数据库

Gremlin 是 Apache TinkerPop 框架的图查询语言,它被用在多种图数据库系统中。这里以 AWS Neptune 作为示例来展示如何连接到 Gremlin 图数据库。

安装支持 Gremlin 的 ent 框架:

go get entgo.io/ent/dialect/gremlin

连接到 Gremlin 数据库:

package main

import (
    "log"
    "entdemo/ent"
    _ "entgo.io/ent/dialect/gremlin"
)

func main() {
    // 连接到 Gremlin 服务端点,这里以本地运行为例。
    client, err := ent.Open("gremlin", "http://localhost:8182")
    if err != nil {
        log.Fatalf("连接失败到 gremlin: %v", err)
    }
    defer client.Close()

    // 初始化或使用 client 来操纵图数据库。
}

如果使用云服务,比如 AWS Neptune,需要将 http://localhost:8182 替换成 Neptune 的服务器地址和端口。