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())
    }
}
相关推荐
仍然.8 小时前
Redis---缓存
数据库·redis·缓存
Aloudata8 小时前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
细嗅蔷薇@8 小时前
排序和分⻚(order by 、limit)
数据库·oracle
wdfk_prog8 小时前
LWIP教程 09:从 `tcp_slowtmr()` 到 Fast Retransmit——TCP 超时重传与重复 ACK
服务器·网络·数据库·网络协议·tcp/ip
逸模8 小时前
BIM在连锁餐饮装修中的应用:不只是画三维图
大数据·数据库·人工智能·物联网·建模
梦想平凡9 小时前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影9 小时前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
天天喝旺仔9 小时前
MySQL 索引原理与慢查询优化实战:从 B+ 树到执行计划调优
数据库·sql·mysql·性能优化
liulilittle10 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen10 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust