Go 连接PostgreSQL数据库
Posted Ficow Shen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 连接PostgreSQL数据库相关的知识,希望对你有一定的参考价值。
先在PostgreSQL数据库中建一个表,可以使用PostgreSQL官方的pgAdmin来完成:
CREATE TABLE userinfo ( uid serial NOT NULL, username character varying(100) NOT NULL, departname character varying(500) NOT NULL, Created date, CONSTRAINT userinfo_pkey PRIMARY KEY (uid) ) WITH (OIDS=FALSE); CREATE TABLE userdeatail ( uid integer, intro character varying(100), profile character varying(100) ) WITH(OIDS=FALSE);
然后运行以下代码,实现连接数据库和增删查改,请自行更改参数配置部分:
package main import ( "database/sql" "fmt" _ "github.com/lib/pq" ) var db *sql.DB func sqlOpen() { var err error db, err = sql.Open("postgres", "port=5433 user=postgres password=123456 dbname=ficow sslmode=disable") //port是数据库的端口号,默认是5432,如果改了,这里一定要自定义; //user就是你数据库的登录帐号; //dbname就是你在数据库里面建立的数据库的名字; //sslmode就是安全验证模式; //还可以是这种方式打开 //db, err := sql.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full") checkErr(err) } func sqlInsert() { //插入数据 stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid") checkErr(err) res, err := stmt.Exec("ficow", "软件开发部门", "2017-03-09") //这里的三个参数就是对应上面的$1,$2,$3了 checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println("rows affect:", affect) } func sqlDelete() { //删除数据 stmt, err := db.Prepare("delete from userinfo where uid=$1") checkErr(err) res, err := stmt.Exec(1) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println("rows affect:", affect) } func sqlSelect() { //查询数据 rows, err := db.Query("SELECT * FROM userinfo") checkErr(err) println("-----------") for rows.Next() { var uid int var username string var department string var created string err = rows.Scan(&uid, &username, &department, &created) checkErr(err) fmt.Println("uid = ", uid, "\\nname = ", username, "\\ndep = ", department, "\\ncreated = ", created, "\\n-----------") } } func sqlUpdate() { //更新数据 stmt, err := db.Prepare("update userinfo set username=$1 where uid=$2") checkErr(err) res, err := stmt.Exec("ficow", 1) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println("rows affect:", affect) } func sqlClose() { db.Close() } func checkErr(err error) { if err != nil { panic(err) } } func sqlTest() { sep := "----------\\n" sqlOpen() println(sep, "*sqlOpen") sqlSelect() println(sep, "*sqlSelect") sqlInsert() sqlSelect() println(sep, "*sqlInsert") sqlUpdate() sqlSelect() println(sep, "*sqlUpdate") sqlDelete() sqlSelect() println(sep, "*sqlDelete") sqlClose() println(sep, "*sqlClose") } func main() { sqlTest() }
相关链接:
可以查看这个驱动库的文档进行学习: https://godoc.org/github.com/lib/pq
另外,还要感谢这位作者的教程: http://www.cnblogs.com/songxingzhu/p/5024517.html
转载请注明出处:http://www.cnblogs.com/ficow/p/6537238.html ,谢谢!
以上是关于Go 连接PostgreSQL数据库的主要内容,如果未能解决你的问题,请参考以下文章
golang基础-Postgresql-ORM框架github.com/go-pg/pg学习五(实战)
Go PostgreSQL:如何从 db.Query 中获取行数?
[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段