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())
    }
}
相关推荐
瀚高PG实验室9 分钟前
审计日志(audit_log )文件过大
数据库·瀚高数据库
tzhou6445211 分钟前
MySQL主从复制与读写分离:从原理到实战
数据库·mysql·adb
爬山算法11 分钟前
Redis(161)如何使用Redis实现分布式锁?
数据库·redis·分布式
可可苏饼干17 分钟前
NoSQL 与 Redis
数据库·redis·笔记·学习·nosql
想搞艺术的程序员25 分钟前
Go 语言 interface 详解:从源码到实践
golang·interface
不穿格子的程序员26 分钟前
MySQL篇3——MySQL深度揭秘:MySQL 索引失效情况与日志机制(redolog undolog binlog)介绍
数据库·mysql·索引失效·日志机制
麦芽糖021930 分钟前
若依管理系统去掉Redis相关配置
数据库·redis·缓存
数据库学啊30 分钟前
国产时序数据库厂家哪家好
数据库·时序数据库
数据库学啊30 分钟前
好用的国产时序数据库哪个专业
数据库·时序数据库
数据库学啊32 分钟前
口碑好的国产时序数据库企业
数据库·时序数据库