目录


1、普通 SQL 写入

taos是通过apt-get方式安装。

需要开启以下服务:

cd /usr/local/taos/cfg/
systemctl start taosadapter.service
netstat -tunlp

 

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/taosdata/driver-go/v3/taosRestful"
)

func createStable(taos *sql.DB) {
	_, err := taos.Exec("CREATE DATABASE power")
	if err != nil {
		log.Fatalln("failed to create database, err:", err)
	}
	_, err = taos.Exec("CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)")
	if err != nil {
		log.Fatalln("failed to create stable, err:", err)
	}
}

func insertData(taos *sql.DB) {
	sql := `INSERT INTO power.d1001 USING power.meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)
    power.d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)
    power.d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)
    power.d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)`
	result, err := taos.Exec(sql)
	if err != nil {
		log.Fatalln("failed to insert, err:", err)
	}
	rowsAffected, err := result.RowsAffected()
	if err != nil {
		log.Fatalln("failed to get affected rows, err:", err)
	}
	fmt.Println("RowsAffected", rowsAffected)
}

func main() {
	var taosDSN = "root:taosdata@http(ip:6041)/"
	taos, err := sql.Open("taosRestful", taosDSN)
	if err != nil {
		log.Fatalln("failed to connect TDengine, err:", err)
	}
	defer taos.Close()
	createStable(taos)
	insertData(taos)
}

 运行结果:

 2、结果展示

 表:

 3、注意事项

无论 RESTful 方式建立连接还是本地驱动方式建立连接,以上示例代码都能正常工作。

USE db;dbName.tbName
4、参数绑定写入
package main

import (
    "fmt"
    "time"

    "github.com/taosdata/driver-go/v3/af"
    "github.com/taosdata/driver-go/v3/common"
    "github.com/taosdata/driver-go/v3/common/param"
)

func checkErr(err error, prompt string) {
    if err != nil {
        fmt.Printf("%s\n", prompt)
        panic(err)
    }
}

func prepareStable(conn *af.Connector) {
    _, err := conn.Exec("CREATE DATABASE power")
    checkErr(err, "failed to create database")
    _, err = conn.Exec("CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)")
    checkErr(err, "failed to create stable")
    _, err = conn.Exec("USE power")
    checkErr(err, "failed to change database")
}

func main() {
    conn, err := af.Open("localhost", "root", "taosdata", "", 6030)
    checkErr(err, "fail to connect")
    defer conn.Close()
    prepareStable(conn)
    // create stmt
    stmt := conn.InsertStmt()
    defer stmt.Close()
    err = stmt.Prepare("INSERT INTO ? USING meters TAGS(?, ?) VALUES(?, ?, ?, ?)")
    checkErr(err, "failed to create prepare statement")

    // bind table name and tags
    tagParams := param.NewParam(2).AddBinary([]byte("California.SanFrancisco")).AddInt(2)
    err = stmt.SetTableNameWithTags("d1001", tagParams)
    checkErr(err, "failed to execute SetTableNameWithTags")

    // specify ColumnType
    var bindType *param.ColumnType = param.NewColumnType(4).AddTimestamp().AddFloat().AddInt().AddFloat()

    // bind values. note: can only bind one row each time.
    valueParams := []*param.Param{
        param.NewParam(1).AddTimestamp(time.Unix(1648432611, 249300000), common.PrecisionMilliSecond),
        param.NewParam(1).AddFloat(10.3),
        param.NewParam(1).AddInt(219),
        param.NewParam(1).AddFloat(0.31),
    }
    err = stmt.BindParam(valueParams, bindType)
    checkErr(err, "BindParam error")
    err = stmt.AddBatch()
    checkErr(err, "AddBatch error")

    // bind one more row
    valueParams = []*param.Param{
        param.NewParam(1).AddTimestamp(time.Unix(1648432611, 749300000), common.PrecisionMilliSecond),
        param.NewParam(1).AddFloat(12.6),
        param.NewParam(1).AddInt(218),
        param.NewParam(1).AddFloat(0.33),
    }
    err = stmt.BindParam(valueParams, bindType)
    checkErr(err, "BindParam error")
    err = stmt.AddBatch()
    checkErr(err, "AddBatch error")
    // execute
    err = stmt.Execute()
    checkErr(err, "Execute batch error")
}