Golang操作PostgreSQL

Golang操作PostgreSQL

注意!!我用的是xorm框架

本文是通过github.com/bmizerany/pq驱动和github.com/go-xorm/xorm框架去操作Pg的,使用前者是因为这个驱动使用的人数比较多,论坛活跃。使用xorm框架去实现操作是因为这样可以少些很多原生的SQL代码,减少出错。

首先我们得有个Pg数据库,这里就不介绍如何去部署了。在数据库中我们创建一个数据库和表,SQL语句如下:

create database test_database;

create table users
(
    id       int,
    sex      int,
    username varchar,
    info     varchar,
    primary key (id)
)

然后我们就可以使用程序去操作Pg数据库啦,下面是代码,记得先get这两个包"github.com/go-xorm/xorm" "github.com/lib/pq"

package main

import (
	"fmt"
	"github.com/go-xorm/xorm"
	_ "github.com/lib/pq"
	"log"
)

//写上自己的数据库的配置
const (
	host     = ""
	port     = 5432
	user     = ""
	password = ""
	dbName   = ""
)

type Users struct {
	Id       int
	Username string
	Sex      int
	Info     string
}

func main() {
	userModel := &Users{
		Id:       1,
		Username: "windows",
		Sex:      1,
		Info:     "操作系统",
	}
	fmt.Println(userModel)
	engine := getDBEngine()
	//insertUser(engine, userModel)
	//deleteUserBySQL(engine, "windows")
	//updateUser(engine, userModel)
	selectAll(engine, "windows")
}

//连接
func getDBEngine() *xorm.Engine {
	psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbName)
	engine, err := xorm.NewEngine("postgres", psqlInfo)
	if err != nil {
		log.Fatal(err)
		return nil
	}
	engine.ShowSQL()
	err = engine.Ping()
	if err != nil {
		log.Fatal(err)
		return nil
	}
	fmt.Println("connect postgresql success")
	return engine
}

//查询
func selectAll(engine *xorm.Engine, name string) {
	var user []Users
	err := engine.Where("users.username=?", name).Find(&user)
	if err != nil {
		log.Println(err)
		return
	}
	fmt.Println(user)
}

//插入
func insertUser(engine *xorm.Engine, user *Users) {
	rows, err := engine.Table("users").Insert(user)
	if err != nil {
		log.Println(err)
		return
	}
	if rows == 0 {
		fmt.Println("插入失败")
		return
	}
	fmt.Println("插入成功")
}

//删除
func deleteUser(engine *xorm.Engine, name string) {
	user := Users{Username: name}
	rows, err := engine.Delete(&user)
	if err != nil {
		log.Println(err)
		return
	}
	if rows == 0 {
		fmt.Println("删除失败")
		return
	}
	fmt.Println("删除成功")
}

//修改
func updateUser(engine *xorm.Engine, user *Users) {
	//Update(bean interface{}, condiBeans ...interface{}) bean是需要更新的bean,condiBeans是条件
	update, err := engine.Update(user, Users{Id: user.Id})
	if err != nil {
		log.Println(err)
		return
	}
	if update > 0 {
		fmt.Println("更新成功")
		return
	}
	log.Println("更新失败")
}

//事务
func sessionUserTest(engine *xorm.Engine, user *Users) {
	session := engine.NewSession()
	session.Begin()
	_, err := session.Insert(user)
	if err != nil {
		session.Rollback()
		log.Fatal(err)
	}
	user.Username = "mac"
	_, err = session.Update(user, Users{Id: user.Id})
	if err != nil {
		session.Rollback()
		log.Fatal(err)
	}
	err = session.Commit()
	if err != nil {
		log.Fatal(err)
	}
}

注意一下我的命名规范,我的数据库表名是users,程序的结构体名字是Users,操作数据库的时候我没有指定表名,xorm框架会自动把我的结构体的名字解析作为表名,解析的规则是大写变小写加下划线 我们也可以指定表名,使用engine.table("users")就可以指定表名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值