Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)
生命不止,继续 Go go go !!! 之前关于golang操作数据库的博客: Go实战–go语言操作MySQL数据库(go-sql-driver/mysql) Go实战–go语言操作sqlite数据库(The way to go) Go实战–golang中使用MongoDB(mgo) Go实战–golang中使用redis(redigo和go-redis/redis) 今天跟大家分享golang中使用PostgreSQL数据库。 何为PostgreSQL官网 PostgreSQL is a powerful,open source object-relational database system. 特点
PostgreSQL 与 MySQL 相比,优势何在? Windows下安装PostgreSQL下载 跳转到https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows 下载速度不是很快,稍安勿躁。 安装 使用pgAdmin打开pgAdmin,要输入之前设置的密码 创建数据库 删除数据库 创建表 插入数据 使用SQL Shell(psql)创建数据库 create database name;
删除数据库 drop database name;
如果出现错误的话,请先断开其他对该数据库的连接。 创建表 CREATE TABLE public.student ( id integer,name character(1)[] COLLATE pg_catalog."default" ) WITH ( OIDS = FALSE ) TABLESPACE pg_default;
ALTER TABLE public.student OWNER to postgres;
插入数据 INSERT INTO public.teacher(
id,age)
VALUES (2, 34);
查询 SELECT * FROM public.teacher; Go中使用PostgreSQLgithub.com/lib/pq 连接 package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 5432
user = "postgres"
password = "your_password"
dbname = "test"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",host,port,user,password,dbname)
db,err := sql.Open("postgres",psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
}
插入 package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 5432
user = "postgres"
password = "wangshubo123"
dbname = "test"
)
type Teacher struct {
ID int
Age int
}
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
sqlStatement := ` INSERT INTO teacher (id,age) VALUES ($1,$2) RETURNING id`
id := 3
err = db.QueryRow(sqlStatement, 3, 19).Scan(&id)
if err != nil {
panic(err)
}
fmt.Println("New record ID is:",id)
}
再运行一次,错误:panic: pq: 重复键违反唯一约束”teacher_pkey” 查询 package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 5432
user = "postgres"
password = "wangshubo123"
dbname = "test"
)
type Teacher struct {
ID int
Age int
}
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
sqlStatement := `SELECT * FROM teacher WHERE id=$1;`
var teacher Teacher
row := db.QueryRow(sqlStatement, 1)
err = row.Scan(&teacher.ID,&teacher.Age)
switch err {
case sql.ErrNoRows:
fmt.Println("No rows were returned!")
return
case nil:
fmt.Println(teacher)
default:
panic(err)
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |