go语言操作 PostgreSQL 数据库

1. Go 的 PostgreSQL 驱动程序

使用go get命令来安装

bash 复制代码
go get github.com/lib/pq

PostgreSQL 数据库凭据:确保要连接的 PostgreSQL 数据库的地址、端口、用户名和密码

2. 导入必要的包

首先,在 Go 代码中导入所需的包,包括 PostgreSQL 驱动程序和其他必要的库。

go 复制代码
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

3. 创建数据库连接

使用以下代码创建一个与 PostgreSQL 数据库的连接:

go 复制代码
db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
if err != nil {
    panic(err.Error())
}
defer db.Close()

确保将user、password、database_name等参数替换为自己的 PostgreSQL 数据库的凭据和名称。

4.执行 CRUD 操作

现在,我们已经建立了与 PostgreSQL 数据库的连接,让我们继续执行 CRUD 操作。

1)创建记录

要创建新的记录,使用以下代码:

go 复制代码
_, err := db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
if err != nil {
    panic(err.Error())
}
2)读取记录

要读取记录,使用以下代码:

go 复制代码
rows, err := db.Query("SELECT username, email FROM user")
if err != nil {
    panic(err.Error())
}
defer rows.Close()

for rows.Next() {
    var username string
    var email string
    err := rows.Scan(&username, &email)
    if err != nil {
        panic(err.Error())
    }
    fmt.Printf("Username: %s, Email: %s\n", username, email)
}

注:rows.Next() 返回true 或 flase,通过返回值判断表中数据进行curd操作

3)更新记录

要更新记录,使用以下代码:

go 复制代码
_, err := db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
if err != nil {
    panic(err.Error())
}
4)删除记录

要删除记录,使用以下代码:

go 复制代码
_, err := db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
if err != nil {
    panic(err.Error())
}

5.简单示例

以下是一个简单的示例,演示如何创建、读取、更新和删除用户记录:

go 复制代码
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "user=username password=password dbname=database_name sslmode=disable")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // 创建记录
    _, err = db.Exec("INSERT INTO user (username, email) VALUES ($1, $2)", "john_doe", "john@example.com")
    if err != nil {
        panic(err.Error())
    }

    // 读取记录
    rows, err := db.Query("SELECT username, email FROM user")
    if err != nil {
        panic(err.Error())
    }
    defer rows.Close()

    for rows.Next() {
        var username string
        var email string
        err := rows.Scan(&username, &email)
        if err != nil {
            panic(err.Error())
        }
        fmt.Printf("Username: %s, Email: %s\n", username, email)
    }

    // 更新记录
    _, err = db.Exec("UPDATE user SET email = $1 WHERE username = $2", "new_email@example.com", "john_doe")
    if err != nil {
        panic(err.Error())
    }

    // 删除记录
    _, err = db.Exec("DELETE FROM user WHERE username = $1", "john_doe")
    if err != nil {
        panic(err.Error())
    }
}
相关推荐
前端 贾公子11 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
杨云龙UP11 小时前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
yzs8711 小时前
openGauss branch diff能力解析
数据库·oracle
郭小李11 小时前
spring中@Transactional注解对事务的支持
数据库·spring·oracle
运维行者_11 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
高铭杰11 小时前
Postgresql源码(160)新的共享内存注册机制,为动态调整shared_buffers打基础
数据库·postgresql
数据库小学妹12 小时前
AI Agent连数据库怎么控权限?只读账号的4个缺口
数据库·人工智能·安全·数据库权限·审计·ai数据库·只读账号
瑞克-桑切斯12 小时前
6、MySQL 总结
数据库
凤凰院凶涛QAQ12 小时前
《MySQL内核拆解:从SQL到InnoDB》(三) : 数据库设计 & 聚合查询 & 分组查询
数据库·sql·mysql
microrain12 小时前
跟着一条属性报文走一遍 SagooIoT 的接入链路
物联网·架构·golang·sagooiot