gorm

作者: hehehehe | 来源:发表于2022-01-13 20:46 被阅读0次

    https://gorm.io/docs/sql_builder.html

    CreateInBatches(poiHnPrds2, 2000) batchSize 过大会hang住,自测2000
    db.Table("hn_test2").Omit("Id3").Create(&hnTest) 指定表名
    db, _ := db15450.DB();db.Close()

    ewkbhexGeom, err := ewkbhex.Encode(c.TheGeom, ewkbhex.NDR)
    
    db.Raw(`INSERT INTO hn_test (the_geom, id) VALUES (?, ?);`, ewkbhexGeom, c.Id).Row()
    
    row := db.Raw("select name, age, email from users where name = ?", "jinzhu").Row()
    row.Scan(&name, &age, &email)
    
    // Raw SQL
    rows, err := db.Raw("select name, age, email from users where name = ?", "jinzhu").Rows()
    defer rows.Close()
    for rows.Next() {
      rows.Scan(&name, &age, &email)
    
      // do something
    }
    
    func NTile(tableName, field string, num int, fileName string, dbConfig config.Config) [][]string {
        db := config.GetDbByCfg(dbConfig)
    
        sql := fmt.Sprintf("WITH subset AS ( SELECT %s,ntile(%d) "+
            " OVER (ORDER BY %s) AS tile FROM %s ) "+
            " SELECT min(%s) as min,max(%s) as max "+
            " FROM subset "+
            " GROUP BY tile ORDER BY tile;", field, num, field, tableName, field, field)
        fmt.Println(sql)
        rows, _ := db.Raw(sql).Rows()
        defer rows.Close()
        var tiles [][]string
        for rows.Next() {
            var min, max string
            rows.Scan(&min, &max)
            tmp := []string{min, max}
            tiles = append(tiles, tmp)
        }
        WriteJson(tiles, fileName)
        return tiles
    }
    
    
    package datatodb
    
    import (
        "fmt"
        _ "github.com/lib/pq"
        "github.com/qichengzx/coordtransform"
        "poi-hn-go/config"
        "poi-hn-go/models"
        "time"
    )
    
    func Edit2Prd(params ...interface{}) string {
        minVal, maxVal := params[0], params[1]
        db15450 := config.GetDbByCfg(config.Db15450)
        db15460 := config.GetDbByCfg(config.Db15460)
    
        fromSql := "select * from poi_hn_edit_1123 " +
            "where hn_id >= ? and hn_id <= ? limit 100"
    
        var poiHnPrds []models.PoiHnPrd
        var poiHnPrds2 []models.PoiHnPrd
        db15450.Raw(fromSql, minVal, maxVal).Scan(&poiHnPrds)
    
        for _, p := range poiHnPrds {
            lon84, lat84 := coordTransform.GCJ02toWGS84(p.Longitude, p.Latitude)
            lon09, lat09 := coordTransform.GCJ02toBD09(p.Longitude, p.Latitude)
            p.LongitudeWgs84, p.LatitudeWgs84 = lon84, lat84
            p.LongitudeBd09, p.LatitudeBd09 = lon09, lat09
            p.HnGeo = models.Geometry{Wkt: fmt.Sprintf("point(%f %f)", p.Longitude, p.Latitude)}
            poiHnPrds2 = append(poiHnPrds2, p)
        }
        db15460.CreateInBatches(poiHnPrds2, 2000)
        time.Sleep(2 * time.Second)
        return "finished"
    
    }
    
    
    
    package models
    
    import (
        "context"
        "database/sql/driver"
        "gorm.io/gorm"
        "gorm.io/gorm/clause"
    )
    
    type Geometry struct {
        Wkt string
    }
    
    func (geom Geometry) DataType() string {
        return "geometry"
    }
    
    func (geom *Geometry) Value() (driver.Value, error) {
        return geom.Wkt, nil
    }
    
    func (geom Geometry) GormValue(ctx context.Context, db *gorm.DB) clause.Expr {
        return clause.Expr{
            SQL:  "ST_GeomFromText(?,4326)",
            Vars: []interface{}{geom.Wkt},
        }
    }
    
    func (geom *Geometry) Scan(v interface{}) error {
        wkt, ok := v.(string)
        if !ok {
            return nil
        }
        geom.Wkt = wkt
        return nil
    }
    
    
    package models
    
    type PoiHnEdit struct {
        HnId      string  `json:"hn_id" gorm:"column:hn_id;"`
        SourceId  string  `json:"source_id" gorm:"column:source_id;"`
        Address   string  `json:"address" gorm:"column:address;"`
        Longitude float64 `json:"longitude" gorm:"column:longitude;"`
        Latitude  float64 `json:"latitude" gorm:"column:latitude;"`
        ProvName  string  `json:"prov_name" gorm:"column:prov_name;"`
        CityName  string  `json:"city_name" gorm:"column:city_name;"`
        AdName    string  `json:"ad_name" gorm:"column:ad_name;"`
        ProvCode  string  `json:"prov_code" gorm:"column:prov_code;"`
        CityCode  string  `json:"city_code" gorm:"column:city_code;"`
        AdCode    string  `json:"ad_code" gorm:"column:ad_code;"`
        HnGeo     Geometry  `json:"hn_geo" gorm:"column:hn_geo;"`
    }
    
    //定义表名
    func (PoiHnEdit) TableName() string {
        return "poi_hn_edit"
    }
    
    

    相关文章

      网友评论

          本文标题:gorm

          本文链接:https://www.haomeiwen.com/subject/jekocrtx.html