go操作pgsql

519 阅读1分钟

示例

使用 Go 语言连接 PostgreSQL 数据库并进行增删改查操作的步骤如下:

1. 安装必要的库

首先,你需要安装 pq 驱动,它是 Go 语言用于连接 PostgreSQL 数据库的库:

go get -u github.com/lib/pq

2. 连接到数据库

使用 sql.Open 函数连接到 PostgreSQL 数据库:

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq"
)

func connectPgsql() *sql.DB {
	//如果没有明确指定 `dbname` 参数,那么 `pq` 驱动默认会尝试连接到与 `user` 参数同名的数据库。
	connStr := "user=postgres  password=xxx dbname=mydatabase host=xxx port=xxx sslmode=disable"
	db, err := sql.Open("postgres", connStr)
	if err != nil {
		log.Fatal(err)
	}

	err = db.Ping()
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Successfully connected!")
	return db
}

创建数据库和表

func TestPgsql() {
	db := connectPgsql()
	defer db.Close()

	//createDb(db)
	//创建表之前,要重新指定连接的数据库
	createTable(db)
}

func createDb(db *sql.DB) {
	_, err := db.Exec("CREATE DATABASE mydatabase")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Database created successfully!")
}

func createTable(db *sql.DB) {
	query := `
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    age INT
)`
	_, err := db.Exec(query)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Table created successfully!")
}

注意,datagrip可能隐藏了数据库

3. 增删改查操作

插入数据:

func insertData(db *sql.DB) {
    sqlStatement := `
    INSERT INTO users (name, age)
    VALUES ($1, $2)
    RETURNING id`
    id := 0
    err := db.QueryRow(sqlStatement, "John", 30).Scan(&id)
    if err != nil {
        panic(err)
    }
    fmt.Println("New record ID is:", id)
}

查询数据:

func queryData(db *sql.DB) {
    rows, err := db.Query("SELECT id, name, age FROM users")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        var age int
        err = rows.Scan(&id, &name, &age)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%d: %s, %d\n", id, name, age)
    }
}

更新数据:

func updateData(db *sql.DB) {
    sqlStatement := `
    UPDATE users
    SET name = $2, age = $3
    WHERE id = $1;`
    _, err := db.Exec(sqlStatement, 1, "NewName", 31)
    if err != nil {
        panic(err)
    }
}

删除数据:

func deleteData(db *sql.DB) {
    sqlStatement := `
    DELETE FROM users
    WHERE id = $1;`
    _, err := db.Exec(sqlStatement, 1)
    if err != nil {
        panic(err)
    }
}
  1. 使用

现在,你可以在主函数中调用上述函数来进行数据库操作:

func main() {
    db := connectToDatabase()
    defer db.Close()

    insertData(db)
    queryData(db)
    updateData(db)
    deleteData(db)
}

注意:上述代码只是一个基本示例,实际应用中可能需要进行更多的错误处理和优化。