使用 pgx连接数据库 | 青训营

438 阅读1分钟

pgx是go的一个专门用于连接postgre数据库的开源库接口,在后端开发中,我们经常需要进行后端的数据库的数据传输操作。 对于用户的存储可以是如下:

var (
	dbConn       *pgx.Conn
	userList     []*controller.User
	userLoggedIn []*controller.UserToken
)

定义了全局变量dbConn ,用于连接postgre数据库的句柄,userList是数据库中的用户列表,userLoggedIn是当前网页的登录用户的Token。

通过以下的函数进行简单的数据库连接:

func connectDb() {

	dbUser := "cstuser"
	dbPwd := "cst3721"
	db := "kdb"
	dbPort := "16900"
	dbHost := "juejin.cn"
	var err error
	url := fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=require",
		dbUser, dbPwd, dbHost, dbPort, db)
	dbConn, err = pgx.Connect(context.Background(), url)
	if err != nil {
		msg := fmt.Sprintf("Unable to connect to database: %v\n", err)
		fmt.Println(msg)
		os.Exit(-1)
		return
	}
	s := "create table if not exists t_user(id serial primary key,name varchar(32),cert varchar(32))"
	_, err = dbConn.Exec(context.Background(), s)
	if err != nil {
		msg := fmt.Sprintf("Unable to connect to database: %v\n", err)
		fmt.Println(msg)
		os.Exit(-1)
		return
	}

	fmt.Printf("connected to %s successfully\n", dbHost)
}

以上代码是简单的连接postgre数据库的连接句柄,通过输入dbHost,dbPwd, dbPort等参数就可以连接了,对于小白十分友好。

下面是一个搜索数据库的简单例子:

func selectUserDB(userd int64) (muserList []*controller.User, err error) {
	s := "select * from ctuser.t_user where id==$1"
	rows, err := dbConn.Query(context.Background(), s, userd)
	if err != nil {
		msg := fmt.Sprintf("Get user failed!: %v\n", err)
		fmt.Println(msg)
		os.Exit(-1)
		return nil, err
	}
	defer rows.Close()
	var nm, ct string
	var mid int64
	for rows.Next() {
		rows.Scan(&mid, &nm, &ct)
		tmpUser := controller.User{mid, nm, ct}
		muserList = append(muserList, &tmpUser)
	}
	fmt.Println("the userInfo len is: &d\n", len(muserList))
	return
}

通过执行Query语句,并通过append方法压入用户序列。

func main() {

	connectDb()

	r := chi.NewRouter()

	r.Use(middleware.Logger)

	r.Use(JSONMiddleware)

	r.Get("/", func(w http.ResponseWriter, _ *http.Request) {
		w.Write([]byte("Hello World!"))
	})

	r.Post("/user", getUser)

	r.Post("/register", getRegister)

	r.Post("/login", getLogin)
	r.Post("/logout", getLogout)


	http.ListenAndServe("localhost:5200", r)

}

简单的route注册,使用了chi库。