Go言語PostgreSQLデータベースの使用

5037 ワード

Go言語PostgreSQLデータベースの使用
 
PostgreSQLはMySQLと比較して、Oracleの代わりに設計されているため、より膨大です.そのため、企業アプリケーションでPostgreSQLを採用するのは賢明な選択です.
現在、MySQLがOracleに買収された後、Oracleは徐々にMySQLを閉鎖していると噂されています.これに鑑みて、将来的にはMySQLではなくPostgreSQLをプロジェクトのバックエンドデータベースとして選択するかもしれません.
1、駆動
Go実装のサポートPostgreSQLのドライバも多く、海外では多くの人が開発中にこのデータベースを使用しているためです.
  • https://github.com/bmizerany/pqdatabase/sql駆動、純Go書き込み
  • をサポート
  • https://github.com/jbarham/gopgsqldriverdatabase/sql駆動、純Go書き込み
  • をサポート
  • https://github.com/lxn/go-pgsqldatabase/sql駆動、純Go書き込み
  • をサポート
    次の例では、現在使用されている人が最も多く、githubでも活躍しているため、最初の駆動を採用しました.
     
     
    2、インスタンスコード
    データベース構築文:
    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);

     
    次のGoがデータベーステーブルデータを操作する方法を見てください:削除して調べます
    package main
    
    import (
        "database/sql"
        "fmt"
        _ "github.com/bmizerany/pq"
    )
    
    func main() {
        db, err := sql.Open("postgres", "user=astaxie password=astaxie dbname=test sslmode=disable")
        checkErr(err)
    
        //    
        stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
        checkErr(err)
    
        res, err := stmt.Exec("astaxie", "    ", "2012-12-09")
        checkErr(err)
    
        //pg       ,       MySQL   ID
        id, err := res.LastInsertId()
        checkErr(err)
    
        fmt.Println(id)
    
        //    
        stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")
        checkErr(err)
    
        res, err = stmt.Exec("astaxieupdate", 1)
        checkErr(err)
    
        affect, err := res.RowsAffected()
        checkErr(err)
    
        fmt.Println(affect)
    
        //    
        rows, err := db.Query("SELECT * FROM userinfo")
        checkErr(err)
    
        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)
            fmt.Println(username)
            fmt.Println(department)
            fmt.Println(created)
        }
    
        //    
        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(affect)
    
        db.Close()
    
    }
    
    func checkErr(err error) {
        if err != nil {
            panic(err)
        }
    }

     
    上記のコードから分かるように、PostgreSQLは、MySQLの$1ではなく、$2?という方法で渡すパラメータを指定し、sql.Openのdsn情報のフォーマットもMySQLのドライバのdsnフォーマットとは異なるので、使用時にそれらの違いに注意してください.
    また、pgはLastInsertId関数をサポートしていません.PostgreSQLの内部でMySQLのような自増IDの戻りが実現されていないため、他のコードはほとんどそっくりです.