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())
    }
}
相关推荐
星马梦缘1 小时前
数据库作战记录 实验7、8
数据库·sql·oracle
安逸sgr1 小时前
Hermes Agent + Obsidian 打造第二大脑(六):分层记忆系统的设计逻辑——L0/L1/L2/L3 四层记忆详解
数据库·agent·知识库·hermes·hermesagent
苍煜2 小时前
一篇讲懂分库分表:概念、spirngboot实战
数据库·oracle
梦想画家2 小时前
PostgreSQL 物化视图实战:从数据固化到智能刷新的全链路指南
数据库·postgresql·物化视图
weoptions2 小时前
简单sql注入中如何通过简单语句判断注入类型&注入方法
数据库·sql
小短腿的代码世界2 小时前
Qt数据库编程深度解析:从SQL基础到ORM架构设计
数据库·sql·qt
Database_Cool_2 小时前
在 RDS PostgreSQL 中实现 RaBitQ 量化
数据库·阿里云·ai·postgresql
会编程的土豆2 小时前
由c/c++速通go语言,新手必看
c语言·c++·golang
【心态好不摆烂】2 小时前
MySQL操作库
数据库·mysql
Javatutouhouduan3 小时前
Java小白如何快速玩转Redis?
java·数据库·redis·分布式锁·java面试·后端开发·java程序员